Oracle 在grails数据库混合中使用PLSQL

Oracle 在grails数据库混合中使用PLSQL,oracle,grails,plsql,migration,liquibase,Oracle,Grails,Plsql,Migration,Liquibase,我正在使用liquibase提供的Grails数据库迁移插件。我尝试在迁移中使用aPLSQL语句来查找和删除表上的约束,我使用这种方法,因为我不知道约束的名称,并且它在我使用的不同系统上会有所不同 一些注意事项: 圣杯1.3.7 数据库迁移1.0 这是迁移中的代码 sql("declare\n" + "vOldName all_constraints.constraint_name%TYPE\n" + "begin\n" + "select CONSTRAIN

我正在使用liquibase提供的Grails数据库迁移插件。我尝试在迁移中使用aPLSQL语句来查找和删除表上的约束,我使用这种方法,因为我不知道约束的名称,并且它在我使用的不同系统上会有所不同

一些注意事项:

  • 圣杯1.3.7
  • 数据库迁移1.0
这是迁移中的代码

sql("declare\n" +
      "vOldName all_constraints.constraint_name%TYPE\n" +
    "begin\n" +
      "select CONSTRAINT_NAME\n" +
      "into   vOldName\n" +
      "from   all_constraints\n" +
      "where  TABLE_NAME='TABLENAME' and CONSTRAINT_TYPE='U' and OWNER='USERNAME'\n" +
      "execute immediate 'alter table USERNAME.TABLENAMEdrop constraint '\n" +
      "|| vOldName\n" +
    "end")
当我运行此命令时,会出现以下错误:

java.sql.SQLException: ORA-06550: line 3, column 1:
  PLS-00103: Encountered the symbol "BEGIN" when expecting one of the following:
    := ( ; not null range default character
  The symbol ";" was substituted for "BEGIN" to continue.
我已尝试添加
到每个语句的结尾,但它会抱怨在代码中看到文件的结尾

需要帮忙吗

sql("declare\n" +
      "vOldName all_constraints.constraint_name%TYPE;\n" +
    "begin\n" +
      "select CONSTRAINT_NAME\n" +
      "into   vOldName\n" +
      "from   all_constraints\n" +
      "where  TABLE_NAME='TABLENAME' and CONSTRAINT_TYPE='U' and OWNER='USERNAME';\n" +
      "execute immediate 'alter table USERNAME.TABLENAME drop constraint '\n" +
      "|| vOldName;\n" +
    "end;")
我想这会解决的。PL/SQL块在每条语句后都需要一个分号。唯一不需要分号的是动态SQL。另外,
TABLENAME
drop
之间缺少空格

首先确保代码在SQL*Plus或其他数据库工具中工作可能会有所帮助。然后将其粘贴到多行字符串中

如果不起作用,请告诉我