【问题标题】:com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '|'com.microsoft.sqlserver.jdbc.SQLServerException:“|”附近的语法不正确
【发布时间】:2015-09-10 16:43:10
【问题描述】:

项目中有两个数据库连接。 1.oracle数据库 2.mssql数据库

数据库连接正常。问题是当数据传输/插入到一个数据库 [oracle] 时显示错误,同时数据成功插入另一个数据库 [mssql]。插入查询很好,但还有另一个查询生成序列号。有问题。

这是属于oracle数据库的查询

return jdbcTemplate.queryForObject("SELECT 'AK'||LPAD(adds_seq.NEXTVAL,13, '0') adds_seq_no     FROM sys.dual ",String.class);

错误是:

SELECT 'AK'||LPAD(adds_seq.NEXTVAL,13, '0') adds_seq_no     FROM sys.dual ",String.class ]; nested exception is com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '|'.
    at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:98)

之前没有mssql连接的时候还可以。

以下查询是针对 oracle 数据库的。当我尝试像这样更改代码时:

String sql = " SELECT 'AK'||LPAD(adds_seq.NEXTVAL,13, '0') adds_seq_no     FROM sys.dual";
String adSeqNum = null;
    try {
            adSeqNum = jdbcTemplate.queryForObject(sql, String.class);

        } catch (Exception e) {
            e.printStackTrace();
        }
         return addSeqNum;

那么错误是

org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL []; ORA-01400: cannot insert NULL into ("ADDSS_HST"."ADDS_SEQ_NO")

1.你能指导我如何解决这个问题吗?

2.你能给我举个例子,说明如何在一个java文件上进行单独的数据库连接吗?

【问题讨论】:

  • 您要插入什么值?听起来该语句试图将NULL 放入Oracle 数据库中ADDSS_HST 表上的ADDS_SEQ_NO 列,但它是NOT NULL 列。

标签: java sql-server oracle jdbc


【解决方案1】:

"Incorrect syntax near '|'" 发生是因为您将 Oracle 语句 "SELECT 'AK'||LPAD(adds_seq.NEXTVAL,13, '0') adds_seq_no FROM sys.dual " 发送到 MSSQL 服务器连接。

第二个错误,cannot insert null into "ADDSS_HST"."ADDS_SEQ_NO" 我怀疑是因为在从序列中选择的发布的 sql 之前,您将记录插入到 ADDSS_HST 表中。它是否正确?如果是这样,我建议您将生成 add_seq_no 的代码放入如下触发器中(根据需要调整名称):

CREATE OR REPLACE TRIGGER "APPLICATION_BI_TRG" 
BEFORE INSERT ON APPLICATION
REFERENCING NEW AS New OLD AS Old
FOR EACH ROW   
BEGIN
  if :new.application_id is null then 
    // if no value was given in insert statement for column application_id 

    SELECT APP_WEB_ID_SEQ.NEXTVAL INTO :NEW.application_id FROM dual;
    // select a value from sequence into :NEW.application_id 

  end if;

END;
/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2017-08-28
    • 2015-12-12
    • 2013-12-16
    • 1970-01-01
    • 2018-08-14
    相关资源
    最近更新 更多