【发布时间】:2016-01-09 20:55:49
【问题描述】:
我遇到了一个问题,我无法将一些字符串从命令行传递到我的存储过程。我可以传递数字,但我不能传递 varchar 的..
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');
感谢您的帮助,谢谢!
【问题讨论】:
-
我看不出与处理在 SQL*Plus
accept语句中输入的参数有关的任何问题。屏幕截图中的错误是由于两件事:(a)您将错误数据传递给存储过程,以及(b)存储过程中的错误处理不足:它很可能正在执行SELECT ... INTO ...并且失败了处理查询没有返回数据的情况。最后,请不要在任何预定义模式中创建对象,例如SYSTEM:而是创建一个单独的用户并使用它。 -
不是真的,我确实有错误处理,传递与图像中相同的参数 (1,2,3,4) 可以完成这项工作,而使用接受则不会。我确实上传了第二张图片,其中我使用了第二个代码摘录。从命令行传递的相同参数可以解决问题,因此必须有一些与如何接受相关的东西
-
第二个屏幕截图中的错误是抱怨
DECLARE块中变量声明后的逗号。DECLARE块中的每个变量声明都必须以分号结尾。用分号替换逗号。 -
用分号替换了逗号,部分解决了问题,我在执行 CreateUsers 区域仍然遇到问题,我认为我没有正确传递参数?还加了一张照片
-
删除
EXECUTE。EXECUTE不是 PL/SQL 关键字:它是一个 SQL*Plus 快捷方式,它只是将行的其余部分包含在BEGIN和END;中。查看您的第一个屏幕截图。