DECLARE
recs_Table SYS_REFCURSOR;
nTable_1_value NUMBER;
nTable_2_value NUMBER;
begin
open recs_Table for
select * from table1, table2;
FETCH recs_Table INTO nTable_1_value, nTable_2_value;
if recs_Table%found then
--do this
else
--do that
end if;
end;
DECLARE
bData_found BOOLEAN := FALSE;
begin
FOR aRow IN (select * from table1, table2)
LOOP
-- If the program gets here, it means a row was fetched
-- do this
bData_found := TRUE;
EXIT; -- if you only care if data was found and don't want to
-- process all the rows
END LOOP;
IF NOT bData_found THEN
-- do that
END IF;
end;
create or replace procedure pro_sample(recs_Table out SYS_REFCURSOR) is
begin
open recs_Table for
select * from table1, table2;
end;
字符串 上述过程将用于打开游标
create or replace procedure pro_sample(recs_Table out SYS_REFCURSOR) is
sam sys_refcursor;
var number;
-- if you have any variables then declare them
begin
pro_sample(sam);
fetch sam into var;
if sam%found then
--do this
else
--do that
end if;
close sam;
end;
create or replace procedure pro_sample(recs_Table out SYS_REFCURSOR) is
begin
open recs_Table for
select a,b,c,d from table1, table2;
end;
create or replace function haveRows_pro_sample is
sam sys_refcursor;
var varchar(200);
varOut number:=0;
begin
pro_sample(sam);
fetch sam into var,var,var,var;
if sam%found then
varOut :=1;
end if;
return varOut;
end;
select count(*) into v_count from table1;
if v_count>0 then
--do this
open my_cursor for
select var1,var2,var3 from table1;
fetch etc.
else
--do that
end if;
--TO GET COUNT ON REF_SYSCURSOR BEFORE SENDING TO THE OUTPUT
SET SERVEROUTPUT ON;
DECLARE
recs_table SYS_REFCURSOR;
curid NUMBER;
BEGIN
OPEN recs_table FOR SELECT
'ABC' name1,
'DEF' name2,
'GHI' name3
FROM
dual
WHERE 1=0;
curid := DBMS_SQL.TO_CURSOR_NUMBER (recs_table);
DBMS_OUTPUT.PUT_LINE('curid :'||curid);
LOOP
IF DBMS_SQL.FETCH_ROWS(curid) > 0 THEN
DBMS_OUTPUT.PUT_LINE('DATA FOUND IN CURSOR :'||curid);
EXIT;
ELSE
DBMS_OUTPUT.PUT_LINE('DATA NOT FOUND IN CURSOR :'||curid);
EXIT;
END IF;
END LOOP;
DBMS_SQL.CLOSE_CURSOR(curid);
END;
/
6条答案
按热度按时间dl5txlt91#
在使用%FOUND属性之前,需要对游标执行FETCH。
字符串
请注意,您可能需要向FETCH语句的INTO子句添加变量,TABLE 1和TABLE 2中的每一列都有一个变量。还请注意,编写此游标的方式可能会返回比预期更多的行;由于没有指定连接条件,您将得到所谓的笛卡尔连接,其中TABLE 1中的每一行都连接到TABLE 2中的每一行-因此,返回的行数是(表1中的行数)*(表2中的行数)。
一种可能更简单的方法是使用游标FOR循环,如下所示:
型
分享和享受。
ha5z0ras2#
我们使用两个过程来执行结果
字符串
上述过程将用于打开游标
型
上述过程将帮助您了解游标是否包含行
41ik7eoe3#
字符串
eqoofvh94#
这是我的工作:D
字符串
uemypmqf5#
您也可以在打开游标之前执行
select count()
查询,然后按如下方式检查,以选择变量中的计数:字符串
7dl7o3gd6#
字符串