2016-11-11 69 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个字符不是数字。
相关问题