誰能幫我 ?我不太擅長 sql....
我試圖把這個例子的輸出放在一個表中
我有這種情況:
DECLARE
v_project_id NUMBER(15);
v_group_name VARCHAR2(150);
v_user_id NUMBER(15);
v_group_id NUMBER(15);
BEGIN
FOR c IN (
SELECT project_id
FROM JSON_TABLE(:projectList,
'$' COLUMNS(NESTED PATH '$.projects[*]'
COLUMNS(
project_id VARCHAR2(150) PATH '$.project.id'
)
)
)
)
LOOP
v_project_id := c.project_id;
v_group_name:= json_value (:projectList,'$.group_name');
v_user_id:= json_value (:projectList,'$.user_id');
v_group_id:= json_value (:projectList,'$.group_id');
DBMS_OUTPUT.PUT_LINE(v_project_id||' - '||v_group_name||' - '||v_user_id||' - '||v_group_id);
END LOOP;
END;
當我運行這個程式時,出現一個填充系結變數的框,我填充了這個 json 引數:
{
"group_name" : "Grupo 1",
"user_id" : 12345,
"group_id": 10001,
"projects":
[
{
"project" : {
"id" : "721"
}
},
{
"project" : {
"id" : "722"
}
},
{
"project" : {
"id" : "723"
}
},
{
"project" : {
"id" : "724"
}
}
]
}
確定之后,結果如下:
721 - Grupo 1 - 12345 - 10001
722 - Grupo 1 - 12345 - 10001
723 - Grupo 1 - 12345 - 10001
724 - Grupo 1 - 12345 - 10001
現在是問題:
如何將此輸出插入具有此結構的名為 APP_PROJECT_GROUP 的表中?
TABLE APP_PROJECT_GROUP (
group_id NUMBER (15) NOT NULL,
group_name VARCHAR2 (150) NOT NULL,
project_id NUMBER (15) NOT NULL,
user_id NUMBER (15) NOT NULL,
PRIMARY KEY ( group_id )
)
我嘗試了很多方法,但我無法解決這個問題
uj5u.com熱心網友回復:
您不能因為group_idJSON 中的所有專案都具有相同的內容,但您也有一個PRIMARY KEY,group_id因此它們都必須是唯一的。PRIMARY KEY如果您的表定義中不包含:
CREATE TABLE APP_PROJECT_GROUP (
group_id NUMBER (15) NOT NULL /*PRIMARY KEY*/,
group_name VARCHAR2 (150) NOT NULL,
project_id NUMBER (15) NOT NULL,
user_id NUMBER (15) NOT NULL
);
然后你不需要 PL/SQL 并且可以使用:
INSERT INTO app_project_group (group_id, group_name, project_id, user_id)
SELECT group_id, group_name, TO_NUMBER(project_id), user_id
FROM JSON_TABLE(
:your_json,
'$'
COLUMNS(
group_name VARCHAR2(150) PATH '$.group_name',
group_id NUMBER(15) PATH '$.group_id',
user_id NUMBER(15) PATH '$.user_id',
NESTED PATH '$.projects[*]'
COLUMNS (
project_id VARCHAR2(15) PATH '$.project.id'
)
)
);
然后該表將包含:
GROUP_ID 組的名字 PROJECT_ID 用戶身份 10001 集團 1 721 12345 10001 集團 1 722 12345 10001 集團 1 723 12345 10001 集團 1 724 12345
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467506.html
上一篇:在觸發器中使用pragmaautomatic_transaction立即執行“altertrigger...disable”會導致OracleApex崩潰
下一篇:根據引數顯示列
