1
我需要在DB中存儲一些查詢(在函數的包中),然後從SQL Developer(從ORDS)調用函數,所以我發現你可以返回查詢從存儲的功能,這樣SYS_REFCURSORs:在SELECT語句中使用從FUNCTION返回的SYS_REFCURSOR
CREATE OR REPLACE FUNCTION test RETURN SYS_REFCURSOR AS
vRC SYS_REFCURSOR;
BEGIN
OPEN vRC FOR SELECT *
FROM employees
WHERE empid = 34650;
RETURN vRC;
END;
,後來,乾脆檢索SQL Developer中的數據是這樣的:
SELECT test
FROM dual;
所以我的問題是...
這是正確的嗎?我知道每次我們打開一個遊標,我們需要明確地關閉它,並且我已經關閉了PL/SQL中的refcursor,並且我需要從SELECT語句中獲取數據(爲了將它解析爲JSON SQL開發者)。
此外,我發現在SQLPlus中,「print」語句一旦獲取所有數據就關閉遊標,SELECT語句在我的示例中是否也這樣做?
我很欣賞你的答案和我的可怕的語法道歉:S
感謝提前:)!
出於某種原因(不知道爲什麼)上面的SELECT語句確實工作正常,事實上我得到它成功解析爲JSON。我的問題是,如果我這樣做,遊標會自動關閉還是永遠不會關閉? –
對不起,我的錯誤,更正爲「測試」(函數的名稱) –
'PRINT'和'SELECT'語句都會讀取遊標,當它們讀取完所有行後,它們將隱式關閉遊標。您不能從遊標讀取數據兩次(但是,您可以多次調用該函數以獲取包含相同信息的多個遊標)。 – MT0