我以前使用过sys_refcursor返回选择语句的数据。但是,我在这里使用立即执行,因此无法在执行立即语句中使用sys_refcursor。
以前我曾经做过
url("http://localhost:3002/delete/"+id)
但是,我今天尝试立即执行,但无法打印select语句的数据。 因此,以下是我尝试过的:
put(form)
该程序运行正常,但是我看不到select语句的数据。如何在控制台中显示立即执行的数据?我正在使用蟾蜍。
答案 0 :(得分:3)
您可以通过执行以下操作为动态构建的SELECT语句返回SYS_REFCURSOR:
CREATE OR REPLACE PROCEDURE OT.check_data(DATA1 number,
R_C OUT SYS_REFCURSOR)
IS
vQuery VARCHAR2(32767);
rc SYS_REFCURSOR;
BEGIN
vQuery :='select * from ot.employee ';
if data1 = 10 then
vQuery := vQuery ||' where deptno in (10)';
else
vQuery := vQuery ||' where deptno in (20,30)';
end if;
OPEN rc FOR vQuery;
R_C := rc;
END;
我强烈建议您不要使用LONG数据类型。多年来已经不推荐使用它,而Oracle(Oracle)最终将放弃对此的支持。使用VARCHAR2(在这种情况下绰绰有余),或者使用CLOB。
答案 1 :(得分:0)
您可以为其创建一个简单的过程。
CREATE OR REPLACE PROCEDURE OT.check_data(DATA1 number,
R_C OUT SYS_REFCURSOR)
IS
BEGIN
Open R_C for 'select * from ot.employee where deptno in ('
|| case when data1 = 10 then '10'
Else '10,20' end
|| ')';
END;
/
您可以这样调用程序:
Declare
Rc sys_refcursor;
Begin
Ot.check_data(10, rc);
-- do something with returned cursor
End;
/
您可以在pl / sql块中打印或使用光标数据:see this qna
干杯!