2015-11-02 57 views
0

我將我的參數傳遞給我的腳本pl/sql時遇到了一些問題。我會傳遞一個空格字符串。因爲我的pl/sql腳本根據它們的位置來處理信息。所以我有相同的信息一個相同的位置,空間提供了信息的確切位置。所以我不能改變這一點。如何將具有空間的變量從批處理傳輸到oracle sqlplus

但是,當我傳遞我的字符串時,我的pl/sql腳本「只」取得字符串,直到第一個空格。之後是ommit。

例如,我通過了'Test1 Name Adresse Validation',但我只有'Test1'在我的數據庫中......它只考慮'Test1'。

我該如何解決它?

的更多信息:

在sqlplus行命令:

sqlplus -L %user%/%pwd%@%db% @C:\Hardis\NDL\SQL\MHUHMS.sql !l! 

並以recup在我的PL/SQL腳本,我的參數的值:

l:='&1'; 

在我的PL/SQL腳本l的定義如下:l NCHAR(2000);

謝謝

回答

1

典型的參數是空間分隔的,所以如果你是通過「ABCD」 ..你可以接受,在SQL中使用& 1,& 2, 4.現在,如果你真的只需要1參數「ABCD 「..有時候會以」ab cd「的形式出現..而你希望在1個變量中..我相信你需要雙引號。使用

SQL> @test asdf 
    old 4: l := '&1'; 
    new 4: l := 'asdf'; 
    Recieved: asdf 

    PL/SQL procedure successfully completed. 

    SQL> @test as df 
    old 4: l := '&1'; 
    new 4: l := 'as'; 
    Recieved: as 

    PL/SQL procedure successfully completed. 

    SQL> @test "as df" 
    old 4: l := '&1'; 
    new 4: l := 'as df'; 
    Recieved: as df 

    PL/SQL procedure successfully completed. 

    SQL> 

測試腳本 「TEST.SQL」 是:

set serverout on 

    declare 
    l varchar2(1000); 
    begin 
    l := '&1'; 

    dbms_output.put_line ('Recieved: ' || l); 
    end; 
/
+0

感謝的答覆。現在的問題是字符串的長度......有超過240個carateres ......並且sqlplus不能接受它......你有小費嗎?http://puu.sh/l6HB4/592ddae194.png ,http://puu.sh/l6HC3/72a5757a34.png(這裏的字符串太長,最大尺寸是239caracteres) –

+0

@ S.Guillaume - 這是一個完全獨立的問題; [你已經問過](http://stackoverflow.com/q/33474013/266304)。如果這些元素總是處於相同的位置,也許你可以將它們不加引號並使用多個位置替換變量來代替? –

+0

@AlexPoole它不是一個單獨的問題,因爲它是相關的。第二個問題涉及到一個問題。所以這是一個惡性循環...... –

相關問題