SQL Plus无法使用Accept

时间:2016-01-09 20:55:49

标签: oracle plsql sqlplus

我遇到了问题,我无法将一些字符串从命令行传递到我的存储过程。我可以通过数字,但我无法通过varchar' s。

accept nr1    char prompt 'Name: ';
accept nr2    char prompt 'Surname: ';
accept nr3    char prompt 'Username: ';
accept nr4    char prompt 'GroupCode: ';

execute CreateUsers('&nr1','&nr2','&nr3','&nr4');

我尝试过使用此

accept nr1   prompt 'Name: ';
accept nr2    prompt 'Surname: ';
accept nr3    prompt 'Username: ';
accept nr4    prompt 'GroupCode: ';

declare
    p_name varchar(30) := '&nr1',
    p_surname varchar(30) := '&nr2',
    p_Username varchar(30) := '&nr3',
    p_GroupCode varchar(30) := '&nr4';

begin
execute CreateUsers(p_name,p_surname,p_username,p_GroupCode);

end;
/

该存储过程具有varchar2个参数,并且可以使用类似

的内容
execute CreateUsers ('anne','123','annie','DBA');

感谢您的帮助,谢谢!

编辑1 添加了错误消息。enter image description here

编辑2 enter image description here

编辑3 enter image description here

1 个答案:

答案 0 :(得分:1)

正如评论中所讨论的,问题出现在这个PL / SQL块中:

declare
    p_name varchar(30) := '&nr1',
    p_surname varchar(30) := '&nr2',
    p_Username varchar(30) := '&nr3',
    p_GroupCode varchar(30) := '&nr4';

begin
execute CreateUsers(p_name,p_surname,p_username,p_GroupCode);

end;
/

块的declare部分中的变量声明应以分号结束,而不是逗号,并且不应在PL / SQL块中使用execute

该块应如下所示:

declare
    p_name varchar(30) := '&nr1';
    p_surname varchar(30) := '&nr2';
    p_Username varchar(30) := '&nr3';
    p_GroupCode varchar(30) := '&nr4';

begin
  CreateUsers(p_name,p_surname,p_username,p_GroupCode);

end;
/