是我沒看懂還是什么,你的句子里面好像沒A2啊 ,怎么提示ORA-00904: "A2"."T3": invalid identifier。 MERGE INTO teb1@zzxxcc te1 USING (select t1 tt1, t2 tt2,t3 tt3 from tes1) te2 ON (te1.cl1 = te2.tt1 ) WHEN MATCHED THEN UPDATE SET
使用oracle作為數(shù)據(jù)庫引擎,在執(zhí)行sql的時(shí)候,出現(xiàn)錯(cuò)誤ORA-00904: invalid identifier,也就是標(biāo)識(shí)符無效。
材料/工具
電腦
方法
大部分情況下,此錯(cuò)誤是由于引用了不存在的列名導(dǎo)致的。
我前陣子也遇到了類似的問題。你可以去檢查下你的數(shù)據(jù)庫,是不是少了一些字段。或者對比一下字段是不是字符什么的打錯(cuò)了。 然后可以檢查一下, 是不是你的列里少了一個(gè)跟主鍵名字一樣的字段。在數(shù)據(jù)庫中,要有一列是與主鍵的名字相同的列才可以
先確定數(shù)據(jù)庫中引用到的列和自己sql中書寫的列名是否一致。如有不同,修改過來,重新測試應(yīng)該可以解決問題。
這是你SQL語句的問題,出現(xiàn)ORA-00904是數(shù)據(jù)庫傳過來的錯(cuò)誤.你把你的SQL語句放到數(shù)據(jù)庫里面查一下是一樣的錯(cuò),不是你代碼的錯(cuò)誤.應(yīng)該是字段不存在或者字段值是字符類型的,你沒有加上引號(hào) , 根據(jù)你回復(fù)一樓的.應(yīng)該是那個(gè)字段是int類型的.而你卻給它
對于某些工具生成的sql,可能導(dǎo)致列明和期望不符的情況,有些工具生成的列名會(huì)帶有雙引號(hào),從而導(dǎo)致此錯(cuò)誤。
SELECT 'Next Month' AS date_title, ADD_MONTHS(sysdate,1) AS date_value FROM dual 函數(shù)名是 ADD_MONTHS 不是 add_month
擴(kuò)展閱讀,以下內(nèi)容您可能還感興趣。
ORACLE 數(shù)據(jù)庫報(bào)錯(cuò) ORA-00904: "A2"."T3": invalid identifier
是我沒看來懂還是什么,你的句子源里面好知像沒A2啊 ,怎么提示ORA-00904: "A2"."T3": invalid identifier。道
MERGE INTO teb1@zzxxcc te1
USING (select t1 tt1, t2 tt2,t3 tt3 from tes1) te2
ON (te1.cl1 = te2.tt1 )
WHEN MATCHED THEN
UPDATE
SET
te1.cl2 = te2.tt2,
te1.cl3 = te2.tt3
WHEN NOT MATCHED THEN
INSERT
VALUES (te2.tt1 ,te2.tt2 ,te2.tt3 ) ;更多追問追答追問我就是這個(gè)意思。。這個(gè)A2 從哪里來的我也不知道。
我這個(gè)SQL 語句 就這么長。 我用TOAD ORACLE 10G
這個(gè)系統(tǒng)老 說A2。T3. 。。。我也沒看見 A2在哪里。
但是 如果我把 USING (select t1 tt1, t2 tt2,t3 tt3 from tes1) te2 改成
USING (select t1 , t2 ,t3 from tes1) te2 這樣
把字段的 別名 全部去掉 就不會(huì)出現(xiàn)問題。。追答MERGE INTO TEB1 TE1
USING (SELECT T1 TT1, T2 TT2, T3 TT3 FROM TEST1) TE2
ON (TE1.CL1 = TE2.TT1)
WHEN MATCHED THEN
UPDATE SET TE1.CL2 = TE2.TT2, TE1.CL3 = TE2.TT3
WHEN NOT MATCHED THEN
INSERT (TE1.CL1, TE1.CL2, TE1.CL3) VALUES (TE2.TT1, TE2.TT2, TE2.TT3);
這是我在PL/SQL驗(yàn)證通過的,跟你那個(gè)比起來也沒什么差別
不過這表TE1是本地的,你可以試下本地建一個(gè)跟TE1完全一樣的表試試看追問MERGE INTO TEB1 TE1 這么寫我這里也沒問題。
MERGE INTO teb1@zzxxcc te1 但是必須要DBLINK
因?yàn)槲疫@里需要 跨數(shù)據(jù)庫作業(yè)。
而且我這個(gè)SQL語句是從別人寫好的SQL PROCEDURE 中 簡化過來的。
正常的程序中的。
看樣子 問題是出現(xiàn)在 跨數(shù)據(jù)庫。和別名這部分了。追答建議你單獨(dú)拿出來運(yùn)行一下,不要在函數(shù)或者過程里面測試,那個(gè)A2太詭異了。追問恩。這個(gè)我就是單獨(dú)拿出來自己寫的。
沒有寫PROCEDURE
只寫了MERGE 這部分。
呵呵。等有了答案 我這里貼出來 !
謝謝你了
java.sql.SQLSyntaxErrorException: ORA-00904: "PAGENOW1": 標(biāo)識(shí)符無效
1、字段名或者表名百寫錯(cuò)了,仔細(xì)檢查核對一下,如果實(shí)在是沒有發(fā)度現(xiàn)錯(cuò)的地方就有可能是第二種情況了
2、你的問字段包含了oracle的關(guān)鍵字,把報(bào)錯(cuò)的字段用雙引號(hào)括起答來試試
應(yīng)該是你這句"select * from (select a1.*,rownum rn from(select * from login)a1 where rownum<=pageSize*pageNow) where rn>=(pageNow-1)*pageSize+1"sql寫錯(cuò)了內(nèi),你在檢查下。你用sqldevelper拼寫的時(shí)候有沒有提容示什么錯(cuò)誤嗎?
希望能夠幫到你
ORA-00904: : invalid identifier
看下是不是編碼的問題
Caused by: java.sql.BatchUpdateException: ORA-00904: "TESTID": 標(biāo)識(shí)符無效.
我前陣子也遇到了類似zhidao的問題。你可以去檢查下你的數(shù)據(jù)庫,是不是少了一些字段?;蛘邔Ρ纫幌伦侄问遣皇亲址裁吹拇蝈e(cuò)了。
然后可以檢查一回下, 是不是你的列里少了一個(gè)跟主鍵名字一樣的字段。在數(shù)據(jù)庫中,要有一列是與主鍵的名字相同的列才可以進(jìn)行正確的識(shí)別。你的問題就是無法識(shí)別到有這個(gè)列,說明就是缺少這個(gè)列。那你就看看添加一個(gè)列,然后名字與主鍵答的相同。
數(shù)據(jù)庫連接成功... java.sql.SQLException: ORA-00904: "SYS": invalid identifier at oracle.jdbc.driver
這是你SQL語句的問題,出現(xiàn)ORA-00904是數(shù)據(jù)庫傳過來的錯(cuò)誤.你把你的SQL語句放到數(shù)據(jù)庫里面查一下copy是一樣的錯(cuò),不是你代碼的錯(cuò)誤.應(yīng)該是字段不存在或者字段值是字符類型的zd,你沒有加上引號(hào) ,
根據(jù)你回復(fù)一樓的.應(yīng)該是那個(gè)字段是int類型的.而你卻給它字符類型的追問這是建的表:USERID NUMBER,USERNAME VARCHAR2, PASSWORD VARCHAR2,給username插入abc查詢就出錯(cuò),插入123查詢沒問題。追答我說的是你插入語句問題 字段的值要用引號(hào)..如果是你用String拼起來的話,要記得拼上單引號(hào)..你調(diào)試的時(shí)候把SQL語句拷出來看一下.例如:
INSERT INTO 表(USERNAME) VALUES ( ' MYNAME ' )
用String拼的話要是 String SQL="INSERT INTO 表(USERNAME) VALUES ( ' "+ MYNAME +" ' );
如果你直接用 INSERT INTO 表(USERNAME) VALUES ( "+ MYNAME ")" 就會(huì)把MYNAME當(dāng)作是數(shù)字類型插入,然后就報(bào)錯(cuò)了
參數(shù)比較多的話建議用占位符,這樣比較不容易出現(xiàn)SQL錯(cuò)誤..
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com