2016-11-11 26 views
-4

在運行下面的查詢,我得到錯誤的領域error_num如何調試錯誤「不允許將數據類型'X'隱式轉換爲'Y'」?

Implicit conversion from datatype 'VARCHAR' to 'INT' is not allowed. 
Use the CONVERT function to run this query. 

下面是查詢

select top 100"Insert into KLG_TRN_SCE..dbBatchRequest values ('" 
+ comp_nr 
+"','" 
+ ssn_nr 
+"','" 
+ convert(char(10),Version,101) 
+"','" 
+ plan_nr 
+"','1" 
+"','" 
+ CAST(LEFT(error_num, 4) AS int) 
+"'," 
+ error_txt 
+"'," 
+ addname 
+"'," 
+ convert(char(10),adddate,101) 
+"')" 
From KLG_TRN_SCE..dcErrorBin 
Where ssn_nr='603761193' 
+1

既不是'convert(char(10),Version,101)',也不是通過'+'或'KLG_TRN_SCE..dcErrorBin'連接是有效的Oracle語法。請參閱Oracle SQL文檔。 –

+0

在Oracle手冊中,您發現'top 100'或'convert()'函數在哪裏?另外'KLG_TRN_SCE..dcErrorBin'是SQL中的無效標識符。 –

+0

你得到的錯誤提示它不是oracle。請更改標籤 – Kacper

回答

1

看來你試圖使用Sybase或T-SQL針對Oracle數據庫。數據庫之間的語法略有差異,特別是日期,字符串連字符和字符串解析。

那麼你是否正在尋找針對Oracle或其他數據庫的執行?如果oracle,下面應該是關閉的。

我不知道你所說的版本或者是什麼格式,你想要的日期是什麼意思,但是這似乎運行。我使用了(公用表表達式)來處理一些數據,以確保它在所有更改之後運行。

所以你的問題:

  1. 沒有這樣的東西作爲頂部,我們可以通過一個rowNum < 101限制;但應該使用順序
  2. 在Oracle ||
  3. 是運營商字符串連接不+你似乎認爲
  4. convert(char(10),Version,101)是一個日期,但除非版本與日期的領域,這是不是在預言真的......在哪種情況下可能需要to_date(version,'DD/MM/YYYY')
  5. 報價"用於現場符號很像[]在T-SQL所以要建立一個動態的插入,我Concat的CHR(39)。
  6. CAST(LEFT(error_num, 4) AS int)是無效的,你需要使用substr(error_num, 1,4)在Oracle
  7. convert(char(10),adddate,101)是Oracle無效也許你的意思是to_date(adddate,'MM/DD/YYYY')

with dcErrorBin(comp_nr, ssn_nr, version,plan_nr, error_num, error_txt,Addname,adddate) as 
(Select 1,'603761193',(SELECT WM_CONCAT(BANNER) FROM V$VERSION),'Three','1234-hello','Error_txt','AddName',sysdate from dual) 

SELECT 
'Insert into KLG_TRN_SCE..dbBatchRequest values (' || chr(39) 
|| comp_nr||Chr(39) 
||',' 
|| chr(39)||ssn_nr||Chr(39) 
||',' 
|| chr(39)||replace(Version,',','~~') || chr(39) 
||',' 
|| chr(39)||plan_nr||Chr(39) 
||',1' 
||',' 
|| CAST(substr(error_num,1,4) AS int) 
||',' 
|| chr(39)||error_txt||Chr(39) 
||',' 
|| chr(39)||addname||chr(39) 
||',' 
|| 'to_date('||chr(39)||adddate||chr(39)||','||chr(39)||'DD-MON-YY'||chr(39)||')' 
||')' 
FROM dcErrorBin 
WHERE ssn_nr='603761193' 
    and rowNum <= 100 
ORDER BY ADDDate Desc; --Perhaps order by add date desc so you get most recent errors? 

導致:

Insert into KLG_TRN_SCE..dbBatchRequest values 
('1' 
, '603761193' 
, 'Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production 
    ~~PL/SQL Release 11.2.0.4.0 - Production 
    ~~CORE 11.2.0.4.0 Production 
    ~~TNS for Linux: Version 11.2.0.4.0 - Production 
    ~~NLSRTL Version 11.2.0.4.0 - Production' 
, 'Three' 
, 1 
, 1234 
, 'Error_txt' 
, 'AddName' 
, to_date('14-DEC-16','DD-MON-YY')) 

的插入會報錯了,如果

  1. 我使用了錯誤的日期格式
  2. 沒有包裹在抽搐正確的價值觀
  3. error_num的前4個字符不是數字。
相關問題