SQL Plus 无法使用 Accept 将参数传递给我的存储过程
Posted
技术标签:
【中文标题】SQL Plus 无法使用 Accept 将参数传递给我的存储过程【英文标题】:SQL Plus can't pass parameters to my stored procedure by using Accept 【发布时间】: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');
感谢您的帮助,谢谢!
编辑 1 添加错误信息。
编辑 2
编辑 3
【问题讨论】:
我看不出与处理在 SQL*Plusaccept
语句中输入的参数有关的任何问题。屏幕截图中的错误是由于两件事:(a)您将错误数据传递给存储过程,以及(b)存储过程中的错误处理不足:它很可能正在执行 SELECT ... INTO ...
并且失败了处理查询没有返回数据的情况。最后,请不要在任何预定义模式中创建对象,例如 SYSTEM
:而是创建一个单独的用户并使用它。
不是真的,我确实有错误处理,传递与图像中相同的参数 (1,2,3,4) 可以完成这项工作,而使用接受则不会。我确实上传了第二张图片,其中我使用了第二个代码摘录。从命令行传递的相同参数可以解决问题,因此必须有一些与如何接受相关的东西
第二个屏幕截图中的错误是抱怨DECLARE
块中变量声明后的逗号。 DECLARE
块中的每个变量声明都必须以分号结尾。用分号替换逗号。
用分号替换了逗号,部分解决了问题,我在执行 CreateUsers 区域仍然遇到问题,我认为我没有正确传递参数?还加了一张照片
删除EXECUTE
。 EXECUTE
不是 PL/SQL 关键字:它是一个 SQL*Plus 快捷方式,它只是将行的其余部分包含在 BEGIN
和 END;
中。查看您的第一个屏幕截图。
【参考方案1】:
正如 cmets 中所讨论的,问题出在这个 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
部分中的变量声明应以分号而不是逗号结尾,并且execute
不应在PL/SQL 块内使用。
该块应如下所示:
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;
/
【讨论】:
以上是关于SQL Plus 无法使用 Accept 将参数传递给我的存储过程的主要内容,如果未能解决你的问题,请参考以下文章
Linq To NHibernate Plus sql 用户定义函数