因為我沒有使用Oracle 21。我不能在表的定義中使用JSON型別。
CREATE TABLE TABLE_TEST_QUERY_2
(
TTQ_NR INTEGER GENERATED BY DEFAULT AS IDENTITY,
TTQ_QUERY_TO_BE_TESTED VARCHAR2 (4000 BYTE),
TTQ_RESULT CLOB,
--RESULT JSON, UPGRADE oracle 21
TTQ_TTQ_CREATION_DATE DATE DEFAULT SYSDATE,
TTQ_ALREADY_TESTED INTEGER DEFAULT 0,
TTQ_TEST_PASSED INTEGER,
PRIMARY KEY (TTQ_NR),
CONSTRAINT RESULT CHECK (TTQ_RESULT IS JSON)
)
我想在 ttq_result 中添加一個 json 物件。不是表示 json 的字串。我有一種將 json 轉換為 clob 的方法。
select to_clob(utl_raw.cast_to_raw (json_object('a' value 2))) from dual;
但它不起作用,如果我嘗試在表中插入從 json 創建的 clob
INSERT INTO BV_OWN.TABLE_TEST_QUERY_2 TTQ_RESULT
VALUES to_clob(utl_raw.cast_to_raw (json_object(a value '2')));
[錯誤] 執行 (3: 13): ORA-03001: 未實作的功能
代碼(甲骨文 18)
更新:
我嘗試使用 oracle 21 在 dbfiddle 上添加一個 json。我正在使用 json 型別來定義一個列。
CREATE TABLE TABLE_TEST_QUERY_2
(
TTQ_NR INTEGER GENERATED BY DEFAULT AS IDENTITY,
TTQ_QUERY_TO_BE_TESTED VARCHAR2 (4000 BYTE),
TTQ_RESULT JSON,
TTQ_TTQ_CREATION_DATE DATE DEFAULT SYSDATE,
TTQ_ALREADY_TESTED INTEGER DEFAULT 0,
TTQ_TEST_PASSED INTEGER,
PRIMARY KEY (TTQ_NR)
)
插入 TABLE_TEST_QUERY_2 TTQ_RESULT 值 json_object('a' value 2);
我有同樣的錯誤。
ORA-03001: 未實作的功能
也許這兩個問題相關。
甲骨文代碼 21
uj5u.com熱心網友回復:
您的第一個問題是因為您使用了錯誤的語法,因為您省略了列識別符號或列值周圍的括號:
INSERT INTO BV_OWN.TABLE_TEST_QUERY_2 (TTQ_RESULT)
VALUES ( to_clob(utl_raw.cast_to_raw (json_object(a value '2'))));
哪個修復了unimplemented feature例外,但現在您得到:
ORA-00984: column not allowed here
這是因為您正在使用SELECT與您更改json_object('a' value 2)為不同json_object(a value '2')的查詢,并且查詢找不到列a。
如果您通過使用SELECTwith中的原始代碼'a'作為字串文字而不是a列識別符號來解決此問題:
INSERT INTO BV_OWN.TABLE_TEST_QUERY_2 (TTQ_RESULT)
VALUES ( to_clob(utl_raw.cast_to_raw (json_object('a' value 2))));
然后你會得到錯誤:
ORA-02290: check constraint (FIDDLE_FCJHJVMCPHKXUCUPDUSV.RESULT) violated
因為轉換為 RAW 然后轉換為 CLOB 會破壞該值。
你需要一些更簡單的東西:
INSERT INTO BV_OWN.TABLE_TEST_QUERY_2 (TTQ_RESULT)
VALUES (json_object('a' value 2));
或者:
INSERT INTO BV_OWN.TABLE_TEST_QUERY_2 (TTQ_RESULT)
VALUES (EMPTY_CLOB() || json_object('a' value 2));
兩者都有效。
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/489472.html
