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;

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

相关推荐
NaZiMeKiY2 小时前
SQLServer数据分页
数据库·sql·sqlserver
码爸2 小时前
java 执行es中的sql
java·sql·elasticsearch
中文很快乐3 小时前
springboot结合p6spy进行SQL监控
java·数据库·sql
666786663 小时前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
知识分享小能手4 小时前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
冰镇毛衣4 小时前
2.4 数据库表字段约束
数据库·sql·mysql
Snowbowღ4 小时前
OpenAI / GPT-4o:Python 返回结构化 / JSON 输出
python·json·openai·api·gpt-4o·pydantic·结构化输出
&木头人&4 小时前
oracle select字段有子查询会每次执行子查询吗
数据库·oracle
冰镇毛衣4 小时前
数据库简介
开发语言·数据库·sql·oracle
(⊙o⊙)~哦4 小时前
oracle查询历史操作记录
数据库·oracle