oracle中如何设置out参数的值
How to set value in out parameter in oracle
我想在 oracle 上创建一个存储过程,其中 return out 参数中的值。我能够创建一个示例查询,但我能够将值设置为输出变量。输出应转换为 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如果有任何错误信息
如有任何帮助,我们将不胜感激。提前致谢
您可以告诉 json_arrayagg
到 return 一个 CLOB,并且 select 直接进入您的 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;
/
...除非您有充分的理由隐藏有用的调试信息。
我想在 oracle 上创建一个存储过程,其中 return out 参数中的值。我能够创建一个示例查询,但我能够将值设置为输出变量。输出应转换为 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如果有任何错误信息
如有任何帮助,我们将不胜感激。提前致谢
您可以告诉 json_arrayagg
到 return 一个 CLOB,并且 select 直接进入您的 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;
/
...除非您有充分的理由隐藏有用的调试信息。