MrM*_*MrM 4 oracle json plsql oracle12c
我正在创建一个将 JSON CLOB 作为 IN OUT 参数的过程。我的问题是如何将 JSON_OBJECT_T 转换为 CLOB?我希望在 CLOB 中维护 JSON 结构,而不仅仅是存储 json 值(请参阅下面的 JSON_OBJECT_T.GET_CLOB('firstname'))。
我的示例测试代码:
CREATE TABLE employees
( employee_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn NOT NULL
, email VARCHAR2(25)
CONSTRAINT emp_email_nn NOT NULL
, phone_number VARCHAR2(20)
, hire_date DATE
CONSTRAINT emp_hire_date_nn NOT NULL
, job_id VARCHAR2(10)
CONSTRAINT emp_job_nn NOT NULL
, salary NUMBER(8,2)
, commission_pct NUMBER(2,2)
, manager_id NUMBER(6)
, department_id NUMBER(4)
, CONSTRAINT emp_salary_min
CHECK (salary > 0)
, CONSTRAINT emp_email_uk
UNIQUE (email)
) ;
INSERT INTO EMPLOYEES VALUES (123,'John','Doe','John.Doe@Test.Com',99999999,TRUNC(SYSDATE),234,60000,null,null,null)
--CREATE OR REPLACE PROCEDURE GETEMPLOYEE (P_CLOB IN OUT CLOB)
--AS
DECLARE
P_CLOB CLOB :=
'{
"employee_id":123
}';
V_JSON_IN JSON_OBJECT_T := JSON_OBJECT_T.PARSE(P_CLOB);
V_EMP_ID NUMBER := V_JSON_IN.GET_NUMBER('employee_id');
V_EMP_REC EMPLOYEES%ROWTYPE;
V_JSON_OUT JSON_OBJECT_T := NEW JSON_OBJECT_T;
BEGIN
P_CLOB := EMPTY_CLOB();
SELECT * INTO V_EMP_REC FROM EMPLOYEES WHERE EMPLOYEE_ID = V_EMP_ID;
V_JSON_OUT.PUT('firstname',V_EMP_REC.First_Name);
V_JSON_OUT.PUT('lastname',V_EMP_REC.Last_Name);
V_JSON_OUT.PUT('salary',V_EMP_REC.Salary);
P_CLOB := V_JSON_OUT.GET_CLOB('firstname');
DBMS_OUTPUT.put_line(TO_CHAR(P_CLOB)); -- JOHN
---How to cast V_JSON_OUT to Clob and store in P_CLOB?
END;
Run Code Online (Sandbox Code Playgroud)
您正在使用get_clob()
which 获取特定的键值。
您可以使用to_string()
或to_clob()
以序列化整个JSON对象到一个字符串值:
序列化是解析函数的反函数。序列化操作采用 JSON 数据的内存表示并将其打印为字符串。序列化函数和过程是:
Run Code Online (Sandbox Code Playgroud)MEMBER FUNCTION to_String RETURN VARCHAR2 ... MEMBER FUNCTION to_Clob RETURN CLOB ...
所以对于你的代码:
P_CLOB := V_JSON_OUT.TO_CLOB;
DBMS_OUTPUT.put_line(P_CLOB);
Run Code Online (Sandbox Code Playgroud)
使用该表的 HR 模式版本,它已经有一个 ID 123,打印出:
{"firstname":"Shanta","lastname":"Vollman","salary":6500}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5874 次 |
最近记录: |