【问题标题】:Unable to do simple insert with Oracle 11g无法使用 Oracle 11g 进行简单插入
【发布时间】:2012-09-04 13:19:15
【问题描述】:

我正在尝试将 Sybase 服务器中的表中的数据复制到 Oracle 服务器 (Oracle 11g) 中的同一个表中。 我认为使用我的 Coldfusion Web 编程会更容易,因为有 2 个不同的数据库服务器。 不幸的是,我从 Oracle 收到了以下错误。我不认为我的语法是错误的。因为所有的逗号都在那里,并且没有错误所说的缺少逗号。我认为这可能是由于设置为 DATE 数据类型的 DATE 列。

这是错误:

Error Executing Database Query.  
[Macromedia][Oracle JDBC Driver][Oracle]ORA-00917: missing comma  

错误发生在C:\Inetpub\wwwroot\test.cfm: line 65

63 :      #um_gs_dnrcnt_cfm_pp#,                                           
64 :      #um_gs_amt_cfm_pg_pp#,                                            
65 :      #um_gs_dnrcnt_cfm_pg_pp#)
66 :     </cfquery>
67 : </cfoutput>



--------------------------------------------------------------------------------

SQLSTATE   HY000 
SQL    INSERT INTO um_gift_sum (um_gs_fyr, um_gs_inst, um_gs_dept, 
                                um_gs_dt_of_record, um_gs_fund_type, 
                                um_gs_dnr_type,
                                um_gs_amt_cash, um_gs_dnrcnt_cash, um_gs_amt_pl,
                                um_gs_dnrcnt_pl, um_gs_amt_pp, um_gs_dnrcnt_pp,  
                                um_gs_amt_pp_prior, um_gs_dnrcnt_pp_prior, 
                                um_gs_amt_gik, um_gs_dnrcnt_gik, 
                                um_gs_amt_pg_cash, 
                                um_gs_dnrcnt_pg_cash, um_gs_amt_pg_pl, 
                                um_gs_dnrcnt_pg_pl, um_gs_amt_pg_pp, 
                                um_gs_dnrcnt_pg_pp, um_gs_amt_gft_mtch, 
                                um_gs_dnrcnt_gft_mtch, um_gs_amt_cfm_pp, 
                                um_gs_dnrcnt_cfm_pp, um_gs_amt_cfm_pg_pp,  
                                um_gs_dnrcnt_cfm_pg_pp) 
       VALUES('1995', 'AB', 'MAA', 1995-01-31 00:00:00.0, '1', 'FR', 100.0000, 0,
              0.0000, 0, 0.0000, 0, 0.0000, 0, 0.0000, 0, 0.0000, 0, 0.0000, 0, 
              0.0000, 0, 0.0000, 0, 0.0000, 0, 0.0000, 0)  

这是我的插入语句:

<cfquery name="x" datasource="SybaseDB">                   
 SELECT TOP 10 * FROM um_sum                               
</cfquery>                                                 

<cfoutput query="x">                                       

  <cfquery name="Y" datasource="OracleDB">                 
  INSERT INTO um_sum (um_gs_fyr,                           
                 m_gs_inst,                                  
                      um_gs_dept,                          
                      um_gs_dt_of_record,                  
                      um_gs_fund_type,                     
            um_gs_dnr_type,                                     

            etc,                                                 

            um_gs_dnrcnt_cfm_pp,                              
            um_gs_amt_cfm_pg_pp,                              
                 um_gs_dnrcnt_cfm_pg_pp)                    
    VALUES('#um_gs_fyr#',                                    
                '#um_gs_inst#',                                 
                '#um_gs_dept#',                                 
    #um_gs_dt_of_record#,    <---- this is date datatype, 
                                   I suspect this may be the problem?          
                '#um_gs_fund_type#',                            
                '#um_gs_dnr_type#',                             
    #um_gs_amt_cash#,                                        
                    #um_gs_dnrcnt_cash#,                         
                    #um_gs_amt_pl#,                              
                    #um_gs_dnrcnt_pl#,                           
                    #um_gs_amt_pp#,                              
                    #um_gs_dnrcnt_pp#,                           
                    #um_gs_amt_pp_prior#,                        
                    #um_gs_dnrcnt_pp_prior#,                     
                    #um_gs_amt_gik#,                             
                    #um_gs_dnrcnt_gik#,                          
                    #um_gs_amt_pg_cash#,                         
                    #um_gs_dnrcnt_pg_cash#,                      
                    #um_gs_amt_pg_pl#,                           
                    #um_gs_dnrcnt_pg_pl#,                        
                    #um_gs_amt_pg_pp#,                           
                    #um_gs_dnrcnt_pg_pp#,                        
                    #um_gs_amt_gft_mtch#,                        
                    #um_gs_dnrcnt_gft_mtch#,                     

         #um_gs_amt_cfm_pp#,                               

         #um_gs_dnrcnt_cfm_pp#,                            
                    #um_gs_amt_cfm_pg_pp#,                       
    #um_gs_dnrcnt_cfm_pg_pp#)                                
    </cfquery>                                             
</cfoutput>

【问题讨论】:

  • 这个 #...# 符号是怎么回事?
  • @Olaf,#...# 是冷融合部分
  • 这看起来对 SQL 注入非常开放

标签: oracle oracle11g


【解决方案1】:

这部分没有正确地用单引号括起来。

AA', 1995-01-31 00:00:00.0, '1'

编辑(根据评论) 如果单引号不能解决问题,那么您可以在 to_date() 函数中显式声明日期格式

【讨论】:

  • 我强烈建议使用带有正确日期定义字符串的 TO_DATE。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-29
  • 2016-03-13
  • 1970-01-01
  • 2021-07-30
  • 2013-08-07
相关资源
最近更新 更多