运行存储过程时出错
Posted
技术标签:
【中文标题】运行存储过程时出错【英文标题】:Getting error while running a Stored Procedure 【发布时间】:2013-10-12 07:34:32 【问题描述】:表结构
Name Null Type
-------- ---- ------------
EMP_NO NUMBER
EMP_NAME VARCHAR2(30)
ADDRESS VARCHAR2(15)
PH_NO NUMBER(10)
DPT_NO NUMBER
程序
create or replace procedure procedure1 (nom in employees.emp_no%type,
vemp_name out employees.emp_name%type)
is
begin
select emp_name into vemp_name from employees where emp_no=nom;
end;
致电
exec procedure1(1);
显示错误
错误
PLS-00306: wrong number or types of arguments in call to 'PROCEDURE1'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
我不知道为什么它会显示该错误。请给我建议。
【问题讨论】:
【参考方案1】:错误信息很容易理解。这是简单的数学。您的程序有两个参数;你的电话只通过一个。
要解决这个问题,您需要传递一个变量来接收 out 参数:
var n varchar2(30)
exec procedure1(1, :n)
print n
注意我们在 SQL 或 PL/SQL 中引用 SQL*Plus 变量时需要使用的冒号。
“执行你的代码后出现错误错误报告:”
嗯,要么您没有执行我的代码,要么您的代码与您在问题中发布的内容不匹配。
这是您的表格...
SQL> create table employees (
2 EMP_NO NUMBER
3 ,EMP_NAME VARCHAR2(30)
4 ,ADDRESS VARCHAR2(15)
5 ,PH_NO NUMBER(10)
6 ,DPT_NO NUMBER )
7 ;
Table created.
SQL> insert into employees values (1, 'MR KNOX', 'LONDON', 23, 10)
2 /
1 row created.
SQL> insert into employees values (2, 'FOX IN SOX', 'BOSTON', 42, 20)
2 /
1 row created.
SQL>
这是您提出的程序......
SQL> create or replace procedure procedure1 (nom in employees.emp_no%type,
2 vemp_name out employees.emp_name%type)
3 is
4 begin
5 select emp_name into vemp_name from employees where emp_no=nom;
6 end;
7 /
Procedure created.
SQL>
这是我如何调用它的演示:
SQL> var n varchar2(30)
SQL> exec procedure1(1, :n)
PL/SQL procedure successfully completed.
SQL> print n
N
--------------------------------------------------------------------------------
MR KNOX
SQL> exec procedure1(2, :n)
PL/SQL procedure successfully completed.
SQL> print n
N
--------------------------------------------------------------------------------
FOX IN SOX
SQL>
【讨论】:
我在想如果给一个 emp_name 那么它会显示 emp_name。有没有可能。如果有可能那么请给出代码 我不明白你的评论。如果我的解决方案不能按您希望的方式工作,请编辑您的问题并阐明您的实际要求,或许可以提供一些示例数据和所需的输出。 在存储过程中如果给出 emp_no 那么在执行这些过程时它将显示 emp_name 要求INPUT: emp_no(like 1,2,3...) Output:emp_name's(like Jim,Scott...)
你明白我的要求了吗...?
该要求是一个完全不同的程序。您应该将其作为一个新问题提出。以上是关于运行存储过程时出错的主要内容,如果未能解决你的问题,请参考以下文章