oracle 遇見過的錯誤集錦

2021-09-02 04:08:06 字數 1983 閱讀 9466

1.ora-38104: 無法更新 on 子句中引用的列 

原因因為 在merge into 語句的update中 更新了用於作為on 鏈結的字段

merge into fxyd_rwsp sp 

using

(select ? rwpc_bh,

sysdate spsj,

? xxly_dm,

? spyj,

? spyjsm,

? spry_dm,

? spry_mc,

? spy_swjg_dm

from dual) newsp

注意 

此處的 

on (sp.rwpc_bh = newsp.rwpc_bh)

on (sp.rwpc_bh = newsp.rwpc_bh) 

when not matched then

insert values(newsp.rwpc_bh,newsp.spsj,newsp.xxly_dm,newsp.spyj,newsp.spyjsm,newsp.spry_dm,newsp.spry_mc,newsp.spy_swjg_dm)

when matched then

注意

sp.rwpc_bh = newsp.rwpc_bh

on的字段這裡是不能更新的

update set sp.rwpc_bh = newsp.rwpc_bh ,

sp.spsj = newsp.spsj,

sp.xxly_dm = newsp.xxly_dm,

sp.spyj = newsp.spyj,

sp.spyjsm = newsp.spyjsm,

sp.spry_dm = newsp.spry_dm,

sp.spry_mc = newsp.spry_mc,

sp.spy_swjg_dm = newsp.spy_swjg_dm

2.ora-01789 

查詢塊具有不正確的結果列數。

這個錯誤一般在執行表之間的相加(union),相減(minus)等sql語句時發生。只要將兩段sql語句的列數調整一致就可以解決了。

3.ora-00907

缺失右括號

4.ora-00933

sql未正確結束

5.ora-01031 

許可權不足 需要登入dba使用者賦予相關許可權

6.ora-22818

不允許子查詢在這裡 

乙個比較典型的例子就是物化檢視裡不允許使用子查詢

但是我們可以換一種寫法 如

nvl('',(select dm.kzsx1 from fxyd_dm dm where dm.dm = dm_jczt.jczt_dm and dm.lx_dm = 'pgzfzztdz')) jczt_mc
在外層套上乙個nvl就可以了

7.ora-01008 

並非所有變數都已繫結

8.ora-01436: connect by loop in user data

在樹形查詢中存在迴圈 (原因是t.gbmb_bh是存在為空的資料null的資料)

update fxyd_rwmx mx 

set mx.gbxxgs = (

select count(1)-1 from

fxyd_rwmx t

where t.rwlx_dm !='xxbc'

start with t.f***_bh = mx.f***_bh

connect by prior t.f***_bh = t.gbmb_bh

)where mx.gbxxgs >0

解決方案

在connect by後加上 nocycle 排除迴圈

所有錯誤集合請看附件

Oracle錯誤集錦

如果只是根據oracle給出的提示直譯,我們可能會比較奇怪,父鍵不存在?這裡的父鍵不存在不是指資料庫當中沒有這個父鍵,而是指不存在父鍵的資料。在建key的名稱時,名字包含非法字元,比如不小心輸入了全形,出現該錯誤時,可以切換輸入法,重新輸入名稱試下。在寫where條件時,字段型別是number型別,...

接觸pl sql 遇見的錯誤

首先開啟測試視窗 在指令碼中輸入 declare 這裡面定義變數 begin 這裡寫 記住 需要用 結束 end end之後需要乙個 在end 之後需要寫 來結束這一段程式設計 如果列印不出 1.是否使用了在開始時呼叫set severoutput on 例子 sql set serveroutpu...

平時遇見的錯誤集合

問題1 例項化乙個thread並start 之後,等待這個執行緒isalive false 時再次去start 該執行緒時會報如下錯誤 the thread already started 解決方法 每次start 執行緒之前都要重新例項化一次 問題2 使用httpurlconnection.get...