ORA-01407: cannot update to null 錯誤解決
在更新客戶資料時 出現ORA-01407錯誤
SQL> select table_id,game_deal_log_id from tb_test_log;
TABLE_ID GAME_DEAL_LOG_ID
---------- ----------------
G 0
10001 4923601
AA 4923676
BB 4923672
CC 4923677
DD 4923674
FF 4923673
GG 4923671
HH 2616668
II 4923668
C 0
D 0
E 0
F 0
14 rows selected
sele
SQL> select * from test;
GAME_DEAL_LOG_ID TABLE_ID
---------------- ----------
4661667 10001
4661556 AA
4661558 BB
4661559 CC
4661553 DD
4661552 FF
4661555 GG
2616668 HH
4661557 II
9 rows selected
SQL>
SQL> update tb_test_log a
2 set game_deal_log_id = (select game_deal_log_id
3 from test b
4 where a.table_id = b.table_id);
update tb_adjustment_handledeal_log a
set game_deal_log_id = (select game_deal_log_id
from test b
where a.table_id = b.table_id)
ORA-01407: cannot update ("TEST"."TB_TEST_LOG"."GAME_DEAL_LOG_ID") to NULL
這是因為上面sql執行時 會更新所有game_deal_log_id欄位 下面我刪除不相等的table_id
SQL> delete from tb_test_log where table_id in ('C','D','E','F','G');
5 rows deleted
SQL>
SQL> update tb_test_log a
2 set game_deal_log_id = (select game_deal_log_id
3 from test b
4 where a.table_id = b.table_id);
9 rows updated
更新成功 這個sql就只能保證兩邊資料記錄一致 才能更新成功
SQL> select table_id,game_deal_log_id from tb_test_log;
TABLE_ID GAME_DEAL_LOG_ID
---------- ----------------
10001 4661667
AA 4661556
BB 4661558
CC 4661559
DD 4661553
FF 4661552
GG 4661555
HH 2616668
II 4661557
9 rows selected
SQL> rollback;
Rollback complete
SQL>
所以上面sql還是寫的有問題,沒有真正關聯到相等的table_id,採取如下寫法就是正確的寫法
SQL> update tb_test_log a
2 set game_deal_log_id = (select game_deal_log_id
3 from test b
4 where a.table_id = b.table_id)
5 where exists (select 1 from test b where a.table_id=b.table_id);
9 rows updated
SQL> select table_id,game_deal_log_id from tb_test_log;
TABLE_ID GAME_DEAL_LOG_ID
---------- ----------------
G 0
10001 4661667
AA 4661556
BB 4661558
CC 4661559
DD 4661553
FF 4661552
GG 4661555
HH 2616668
II 4661557
C 0
D 0
E 0
F 0
14 rows selected
SQL>
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7199859/viewspace-430077/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Ubuntu Cannot allocate memory 錯誤解決方案Ubuntu
- Excel匯入null錯誤解決方式ExcelNull
- JSF中 Target Unreachable, returned null錯誤的解決JSNull
- virtualbox中Cannot register the hard disk錯誤解決辦法
- Workspace in use or cannot be created, choose a different one.--錯誤解決辦法
- ORA-01552: cannot use system rollback錯誤解決方法
- Oracle update set欄位=nvl(n,0)還報《ORA-01407:無法更新欄位為NULL》原因分析和解決OracleNull
- 錯誤pointcut is null in InterceptorsChainNullAI
- ORA-04092: cannot COMMIT in a trigger錯誤的解決MIT
- ora-01034 ora-27121 Cannot allocate memory錯誤解決
- redhat vsftpd及vsftpd 500 OOPS: cannot change directory錯誤解決RedhatFTPOOP
- Ocelot錯誤解決
- mongodb錯誤解決辦法-bash: ./mongod: cannot execute binary file: Exec format errorMongoDBORMError
- win8.1update錯誤程式碼80073712解決方法
- windows update更新失敗報錯解決方法Windows
- SyntaxError: Non-ASCII character 與 Cannot decode using encoding "ascii" 錯誤解決ErrorASCIIEncoding
- VIM 常用錯誤解決
- sqldeveloper for windows 錯誤解決SQLDeveloperWindows
- Cannot set property 'innerHTML' of nullHTMLNull
- Go 自定義日期時間格式解析解決方案 - 解決 `parsing time xx as xx: cannot parse xx as xx` 錯誤Go
- VSFTPD錯誤的解決 500 OOPS: vsftpd: cannot locate user specified in ftp_usernaFTPOOP
- ORA-01552: cannot use system rollback segment for non-system tablespace 'USERS'錯誤解決
- 【Redis】錯誤:failed: Hostname must not be empty or nullRedisAINull
- 無法發貼,NULL錯誤,求助!Null
- vsftpd 錯誤:530 and 500 錯誤解決方法FTP
- latex 錯誤以及解決方案
- ora-27504錯誤解決
- Datastore error in 'dirbdb'錯誤解決ASTError
- ORA-27054 錯誤解決
- mysql與php錯誤解決MySqlPHP
- mysql錯誤解決總結MySql
- PbootCMS 404 錯誤解決方法boot
- Cannot set property ‘type‘ of null(vue)NullVue
- 【故障解決】OGG-00446 錯誤解決
- MogDB 安裝解壓錯誤:cannot run bzip2: No such file or directory
- 解決String cannot be cast to java.util.List報錯ASTJava
- vm安裝ubuntu後,update報錯問題解決Ubuntu
- ORA-600(kssadd: null parent)錯誤Null