如何在liquibase sql格式中使用set define off

时间:2017-06-09 06:14:01

标签: html oracle liquibase

我有一个HTML文件存储在数据库中。我正在使用Liquibase,但在HTML中我有很多 个实例。

问题是SQL不允许&在没有set define off选项的情况下运行。

我从网上了解了以下解决方案:

  • 我读过我可以使用cdata,但是我在这里使用Liquibase SQL格式而不是XML格式插入HTML,所以我认为它没有用。
  • 由于文件中有很多 ,我不能每个都使用ASCII字符来避免&

Liquibase执行错误:

SEVERE 6/7/17 11:30 AM:liquibase: Error executing SQL set define off
java.sql.SQLException: ORA-00922: missing or invalid option

    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

Liquibase抱怨的set define off不是SQL,it is a SQL*Plus client command

  

SET DEF [INE] {& | c | ON |关闭}

     

将用于替换变量的字符设置为c。

     

ON或OFF控制SQL * Plus是否将扫描替换变量的命令并将其替换为值。 ON将c的值更改回默认值'&'而不是最近使用的字符。将DEFINE设置为OFF将覆盖SCAN变量的设置。

它也被SQL DeveloperSQLcl使用。所有这些客户都使用它来控制substitution variables的行为。

Liquibase显然不会识别该客户端命令,因此应将其从脚本中删除。

答案 1 :(得分:0)

As& in&(&) 被认为是sql中的替换变量而liquibase忽略了set define off语句,所以我用ascii字符来使用&在liquibase中定义的sql查询中,如下所示:

及(号)NBSP;改为' || '&安培;' || ' NBSP' || CHR(59)|| '和查询工作