我想在 oracle 上創建一個存盤程序,它在輸出引數中回傳值。我能夠創建一個示例查詢,但我能夠將值設定為輸出變數。并且輸出應轉換為 JSON
這是我的代碼
CREATE OR REPLACE PROCEDURE GET_TABLE_NAMES(JSON_DATA OUT CLOB )
-- OUT OUT_IS_SUCCESS BOOLEAN,
-- OUT OUT_ERROR_MESSAGE VARCHAR(4000)
AS
l_cursor_1 SYS_REFCURSOR;
BEGIN
--JSON_DATA :=
OPEN l_cursor_1 FOR SELECT JSON_ARRAYAGG(
JSON_OBJECT('TABLE_NAME' VALUE T.TABLE_NAME)
) INTO JSON_DATA
FROM
(
select TABLE_NAME FROM all_tables
) T
;
JSON_DATA := TO_CLOB(l_cursor_1);
--dbms_sql.return_result(l_cursor_1);
END GET_TABLE_NAMES;
我想在 3 個變數中獲得輸出 JSON_DATA 包含 JSON 格式 OUT_IS_SUCCESS 布爾標志如果沒有發生錯誤 OUT_ERROR_MESSAGE 如果有任何錯誤訊息
任何幫助將不勝感激。提前致謝
uj5u.com熱心網友回復:
您可以告訴json_arrayagg回傳一個 CLOB,并將其直接選擇到您的 OUT 引數中。另外兩個注釋掉的引數格式不正確;該OUT是放錯了地方,字串不應該有一個大小。
您可以執行以下操作:
CREATE OR REPLACE PROCEDURE GET_TABLE_NAMES(
P_JSON_DATA OUT CLOB,
P_IS_SUCCESS OUT BOOLEAN,
P_ERROR_MESSAGE OUT VARCHAR2
)
AS
BEGIN
SELECT JSON_ARRAYAGG(
JSON_OBJECT('TABLE_NAME' VALUE TABLE_NAME)
FORMAT JSON
RETURNING CLOB
)
INTO P_JSON_DATA
FROM all_tables;
P_IS_SUCCESS := TRUE;
EXCEPTION
WHEN OTHERS THEN
P_IS_SUCCESS := FALSE;
P_ERROR_MESSAGE := SQLERRM;
END GET_TABLE_NAMES;
/
db<>fiddle,帶有額外的虛擬代碼以在第二次呼叫時強制例外。
但是捕獲例外,尤其是使用when others,只是將它們轉換為沒有背景關系(例如發生錯誤的位置)的基本字串很少是一個好主意 - 讓任何例外流回呼叫者會更簡單:
CREATE OR REPLACE PROCEDURE GET_TABLE_NAMES(
P_JSON_DATA OUT CLOB
)
AS
BEGIN
SELECT JSON_ARRAYAGG(
JSON_OBJECT('TABLE_NAME' VALUE TABLE_NAME)
FORMAT JSON
RETURNING CLOB
)
INTO P_JSON_DATA
FROM all_tables;
END GET_TABLE_NAMES;
/
資料庫<>小提琴
...除非您有充分的理由隱藏有用的除錯資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/314310.html
