我有一个非常简单的测试过程:
create or replace PROCEDURE TestSproc
(userName in VARCHAR2, p_Test OUT SYS_REFCURSOR)IS
BEGIN
OPEN p_Test FOR
SELECT * FROM Test_Table
WHERE name = userName ;
END TestSproc;
当我在proc页面上的sqldeveloper中运行proc(ctrl f10)时,我得到了我期望的结果。但是当我尝试使用以下查询调用proc时,我收到错误:
从命令行中的第1行开始出错 - 开始DB.TestSproc('Phil');端;
错误报告 - ORA-06550:第2行第1列:
PLS-00306:调用'TestSproc'时参数的数量或类型错误 ORA-06550:第2行,第1列:PL / SQL:语句被忽略
06550. 00000 - “行%s,列%s:\ n%s”
*原因:通常是PL / SQL编译错误 *行动:
begin
DB.TestSproc('Phil');
end;
任何人都可以指出我正确的方向。
修改
在SQL Server中,我只会这样做:
USE DB;
GO
EXEC dbo.TestSproc@Name= 'Phil';
答案 0 :(得分:2)
假设您正在使用带有12c客户端的Oracle 12c:
create or replace procedure testsproc
( username in varchar2 )
as
resultset sys_refcursor;
begin
open resultset for
select * from test_table
where name = username;
dbms_sql.return_result(resultset);
end testsproc;
然后用
调用它exec testsproc('Phil')
或
call testsproc('Phil');
或
begin
testsproc('Phil');
end;
取决于您所称的内容。
答案 1 :(得分:1)
你必须把输出放在某处,所以 - 声明一个合适的变量:
SQL> create or replace procedure p_test (par_deptno in number, p_emps out sys_refcursor) is
2 begin
3 open p_emps for
4 select deptno, empno, ename
5 from emp
6 where deptno = par_deptno;
7 end;
8 /
Procedure created.
SQL>
SQL> var l_out refcursor
SQL>
SQL> begin
2 p_test(10, :l_out);
3 end;
4 /
PL/SQL procedure successfully completed.
SQL>
SQL> print :l_out;
DEPTNO EMPNO ENAME
---------- ---------- ----------
10 7839 KING
10 7782 CLARK
10 7934 MILLER
SQL>