您需要使用FOUND屬性%之前執行FETCH反光標。你的代碼更改爲類似
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;
請注意,你可能需要一個外部變量到FETCH語句,一個在Table 1和Table每一列的INTO子句的方式。還要注意,這個遊標寫入的方式可能會得到比您預期的更多的行;因爲沒有指定連接條件,您將得到所謂的笛卡爾連接,其中TABLE1中的每一行都連接到TABLE2中的每一行 - 因此,您將返回的行數是(TABLE1中的行數)* (TABLE2中的行數)。
一個潛在的更簡單的方式來做到這將是使用遊標FOR循環,如下:
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;
分享和享受。
您需要檢查您的查詢,打開,提取,關閉遊標。請參閱oracle docs:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS00605 – Art