ant sql任务:复杂的CLOB内容导致异常



作为一名数据库用户而不是数据库程序员,我发现以下情况非常奇怪。也许有人能在这里发光?

任务:使用ant脚本跟踪数据库表(下面是history_table)中的sql脚本执行,该脚本获取sql脚本,执行它,并将执行的脚本放入历史表中。到目前为止,这是有效的(例如,使用一行sql脚本,如"select sysdate from dual;"),但对于sql脚本中更复杂的内容,会出现错误。下面的示例代码应该可以解释这个问题。

表格:

create table history_table (
    case_nr varchar2(20) not null,
    sql_data clob not null
)

蚂蚁的任务:

<target name="put_into_history_table">
    <loadfile property="script_content.raw" srcFile="${script}" />
    <sql
        classpath="./ojdbc6.jar"
        driver="oracle.jdbc.OracleDriver"
        url="jdbc:oracle:thin:@${db.hostname}:${db.port}:${db.sid}" 
        userid="${db.user}" 
        password="${db.password}"
        expandproperties="true">
insert  into history_table (case_nr, file_content)
        values ('${case.nr}', to_clob('${script_content.raw}');
commit;
    </sql>
</target>

script.sql

select *
from some_table
where (
    name is not null
    and
    condition = 'T'
);

结果,又称异常:

$ ant
Buildfile: D:tempscriptsbuild.xml
put_into_history_table:
      [sql] Executing commands
      [sql] Failed to execute:
      [sql] insert      into history_table (case_nr, file_content)
      [sql]             values ('case123', to_clob('select *
      [sql] from some_table
      [sql] where (
      [sql]     name is not null
      [sql]     and
      [sql]     condition = 'T'
      [sql] );
      [sql]
      [sql] '));
      [sql] commit;
BUILD FAILED
D:tempscriptsbuild.xml:48: java.sql.SQLSyntaxErrorException: ORA-00907: missing right parenthesis
...
Total time: 0 seconds
$

我不确定,在哪里我错过了什么。伊姆霍的clob应该被视为大量的字符,而不是以任何方式解释。(可能很重要:ant版本:1.9.2;java版本1.8.0_31;oracle版本11.2.0.1.0)我们非常感谢任何帮助或解释。

您的错误状态为"缺少右括号",可能来自这里:

select *
from some_table
where (
    name is not null
    and
    condition = 'T'
};  

"}"应该是一个括号。

正如下面的讨论中所述,异常实际上是由script.sql.

中出现的引号转义不足引起的

相关内容

  • 没有找到相关文章

最新更新