Oracle 在grails数据库混合中使用PLSQL
我正在使用liquibase提供的Grails数据库迁移插件。我尝试在迁移中使用aPLSQL语句来查找和删除表上的约束,我使用这种方法,因为我不知道约束的名称,并且它在我使用的不同系统上会有所不同 一些注意事项: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
- 圣杯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或其他数据库工具中工作可能会有所帮助。然后将其粘贴到多行字符串中
如果不起作用,请告诉我