ibatis/Oracle - INSERT 中的 SELECT 查询失败

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2473373/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-18 20:14:47  来源:igfitidea点击:

ibatis/Oracle - SELECT query inside INSERT is failing

sqloracleibatis

提问by jobinbasani

I'm trying to do an Insert operation using iBatis.

我正在尝试使用 iBatis 进行插入操作。

    INSERT INTO SCHEMA.TABLE
       (FIELD1, 
        FIELD2, 
        FIELD3)
     VALUES
       (#field1#, 
            (SELECT 
                ANOTHER_FIELD
            FROM 
                SCHEMA.TABLE
            WHERE 
                FIELD4= #field2#), 
        #field2#)

The inner select query always fails and returns NULL. But if I substitute #field2# with the actual value only in the inner query, it works fine. Why is iBatis not substituting fieldvalues in the innerqueries?

内部选择查询总是失败并返回 NULL。但是如果我只在内部查询中用实际值替换 #field2# ,它就可以正常工作。为什么 iBatis 不替换内部查询中的字段值?

Any ideas?

有任何想法吗?

回答by Peter Lang

The following way using a single sub-query and omitting the VALUESkeyword would work with Oracle, please try with iBatis:

以下使用单个子查询并省略VALUES关键字的方法适用于 Oracle,请尝试使用 iBatis:

INSERT INTO SCHEMA.TABLE
   (FIELD1, 
    FIELD2, 
    FIELD3)
   (
        SELECT
            #field1#, 
            ANOTHER_FIELD,
            #field2#
        FROM 
            SCHEMA.TABLE
        WHERE 
            FIELD4= #field2#
   )

回答by Allan

That syntax is invalid for Oracle. Try the following:

该语法对 Oracle 无效。请尝试以下操作:

INSERT INTO SCHEMA.TABLE
   (FIELD1, 
    FIELD2, 
    FIELD3) 
   SELECT 
       #field1#,
       ANOTHER_FIELD,
       #field2#
   FROM 
       SCHEMA.TABLE
   WHERE 
       FIELD4= #field2#