2015-11-02 31 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它不是一个单独的问题,因为它是相关的。第二个问题涉及到一个问题。所以这是一个恶性循环...... –

相关问题