2
我想從DBMS_SQL.TO_CURSOR_NUMBER迭代遊標編號,並在我嘗試將值拉入變量時遇到問題–,我得到ORA-01007(變量不在選擇列表中)。如何從一個從SYS_REFCURSOR派生的DBMS_SQL遊標中獲取值?
這裏有一個代碼塊重複我的問題:
DECLARE
cur SYS_REFCURSOR;
nm INTEGER;
colDescs DBMS_SQL.DESC_TAB2;
numCols INTEGER;
val VARCHAR2(3);
BEGIN
OPEN cur FOR
SELECT 'x' AS foo, 2 AS bar
FROM dual;
nm := DBMS_SQL.TO_CURSOR_NUMBER(cur);
DBMS_SQL.DESCRIBE_COLUMNS2(nm, numCols, colDescs);
DBMS_OUTPUT.PUT_LINE(numCols);
DBMS_OUTPUT.PUT_LINE(DBMS_SQL.FETCH_ROWS(nm));
DBMS_SQL.column_value(nm, 1, val);
DBMS_OUTPUT.PUT_LINE(val);
DBMS_SQL.CLOSE_CURSOR(nm);
EXCEPTION
WHEN OTHERS THEN
DBMS_SQL.CLOSE_CURSOR(nm);
DBMS_OUTPUT.PUT_LINE('borked '||SQLCODE);
END;
/
預期輸出:
2
1
x
實際輸出:
2
1
borked -1007
什麼是誤導性的流程圖!我不認爲這是必要的 - 執行步驟被跳過轉換光標,所以我假設所有東西之前,它也被跳過。 – Malnormalulo 2014-10-07 20:17:35
@Malnormalulo - 我不知道你是否可以在define之前執行execute操作;但即使可以,也可以按順序顯示,以避免'execute_and_fetch'的複雜性。但是,在這方面有點混淆。 – 2014-10-07 20:22:06