Oracle使用EXECUTE IMMEDIATE 动态 SQL 传递 JSON_OBJECT_T类型参数

sql 复制代码
CREATE OR REPLACE FUNCTION process_json(json_data JSON_OBJECT_T) RETURN VARCHAR2 AS
    name_value VARCHAR2(100);
    age_value NUMBER;
    city_value VARCHAR2(100);
BEGIN
    name_value := json_data.GET('name').TO_STRING;
    age_value := json_data.GET('age').TO_NUMBER;
    city_value := json_data.GET('city').TO_STRING;
    RETURN 'Name: ' || name_value || ', Age: ' || age_value || ', City: ' || city_value;
END;
/

DECLARE
    json_obj JSON_OBJECT_T;
    sql_stmt VARCHAR2(500);
    result VARCHAR2(500);
BEGIN
    json_obj := JSON_OBJECT_T('{"name":"John","age":30,"city":"New York"}');

    sql_stmt := 'BEGIN :result := process_json(:json_param); END;';

    EXECUTE IMMEDIATE sql_stmt USING OUT result, IN json_obj;

    DBMS_OUTPUT.PUT_LINE(result);
END;

函数 process_json 从传入的 JSON 数据中提取了不同键对应的值,并将它们组合成一个返回的字符串。在匿名块中,通过动态 SQL 执行了这个函数并输出结果。

下面是传输json字符串的改动方法:

复制代码
EXECUTE IMMEDIATE sql_stmt USING OUT result, IN json_str;

调用方法的接受参数改成字符串就可以了。

相关推荐
Themberfue2 小时前
SQL ②-库操作 | 数据类型
数据库·sql·mysql
li_Michael_li2 小时前
MySQL Explain 分析 SQL 执行计划
数据库·sql·mysql
Yan-英杰2 小时前
【百日精通JAVA | SQL篇 | 第四篇】约束
java·服务器·开发语言·数据库·人工智能·sql·mysql
欸呀呀呀9 小时前
对象转成json后转成byte[]后在转成string会提示序列化失败,第一个字符是问号
后端·json
喻师傅12 小时前
横扫SQL面试——PV、UV问题
大数据·数据库·sql·面试·数据分析·uv
麓殇⊙13 小时前
springMVC-Json交互处理
json·交互
还是鼠鼠14 小时前
Node.js自定义中间件
javascript·vscode·中间件·node.js·json·express
快来卷java16 小时前
MySQL篇(六)MySQL 分库分表:应对数据增长挑战的有效策略
数据库·mysql·oracle
懒惰的橘猫17 小时前
mapreduce工作原理
json