我正在使用版本11.2 Oracle數據庫。我需要更新表DOCUMENT_SHARING document_id的基於什麼在其他表中,正確的ID應該由其他唯一標識符選擇。一個文檔可能有多個共享,或者根本沒有。怎麼做?我卡住了。如何根據其他表中的內容更新表ID-s?
下面是表的例子:
DOCUMENT
id | text | doc_id
--------------------------
6 | foo1 | 1021
120 | foo2 | 1123
123 | foo3 | 1429
121 | foo4 | 1527
998 | foo5 | 1722
542 | foo6 | 1923
DOCUMENT_SHARING
document_id | shared_to | doc_id
--------------------------------------
| human1 | 1021
| human2 | 1123
| human3 | 1429
| human4 | 1527
| human5 | 1722
| human6 | 1923
我想更新表DOCUMENT_SHARING DOCUMENT_ID,這樣的結果會是這樣:
DOCUMENT_SHARING
document_id | shared_to | doc_id
--------------------------------------
6 | human1 | 1021
120 | human2 | 1123
123 | human3 | 1429
121 | human4 | 1527
998 | human5 | 1722
542 | human6 | 1923
我曾嘗試以下操作:
UPDATE DOCUMENT_SHARING DS SET DS.document_id = (SELECT D.ID FROM DOCUMENT D WHERE D.remote_application = 'DMS' AND D.doc_id IS NOT NULL AND D.doc_id = DS.doc_id) where DS.doc_id IS NOT NULL;
但我得到錯誤:
Error report:
SQL Error: ORA-01407: cannot update ("SCHEMA"."DOCUMENT_SHARING"."DOCUMENT_ID") to NULL
01407. 00000 - "cannot update (%s) to NULL"
查詢 「DESCR DOCUMENT_SHARING」
Name Null Type
---------------- -------- --------------
DOCUMENT_ID NOT NULL NUMBER(12)
USER_CODE NOT NULL VARCHAR2(50)
DOC_ID NUMBER(12)
請注意:您可以使用別名爲表方便,但在這種情況下,他們不含糊。 – danihp
我不明白,你匹配doc_id和document_id,但我應該使用兩個表doc_id列匹配。 – Marko
對不起@Marko,我的錯!我重寫了句子,現在用強制別名。 – danihp