alter table期间发生Oracle存储过程编译错误
我编写了一个存储过程:alter table期间发生Oracle存储过程编译错误,oracle,stored-procedures,Oracle,Stored Procedures,我编写了一个存储过程: CREATE OR REPLACE PROCEDURE test1 AS strSchema VARCHAR2(20); BEGIN EXECUTE IMMEDIATE 'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT '; 'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT '; 'ALTER TABLE TABL
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
COMMIT;
END test1;
但我在编译过程中遇到以下错误,不确定原因
PLS-00103:在预期以下情况之一时遇到符号“ALTER TABLE”:
(如果循环模式为goto,则开始案例声明结束异常退出
null pragma raise return select update with with with with with
一个命令中的一个立即执行
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
END test1;
一个命令中的一个立即执行
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
END test1;
这应该行得通。实际上不需要提交。
altertable
是一个不需要提交的DDL语句
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
COMMIT;
END test1;
这应该行得通。实际上不需要提交。
altertable
是一个不需要提交的DDL语句
CREATE OR REPLACE PROCEDURE test1
AS
strSchema VARCHAR2(20);
BEGIN
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEA_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_A DISABLE CONSTRAINT TABLEB_CONTRAINT ';
EXECUTE IMMEDIATE
'ALTER TABLE TABLE_C DISABLE CONSTRAINT TABLEC_CONTRAINT ';
COMMIT;
END test1;
对于
DDL
@LalitKumarB,不需要COMMIT
是的,谢谢。只需从问题:)中复制即可。对于DDL
@LalitKumarB,不需要COMMIT
是的,谢谢。只需复制问题:)在使用executeimmediate(ab)之前,您需要重新考虑。您应该在纯SQL中完成它,在PL/SQL中到底需要做什么?在旁注上,1。您声明了一个变量,但从未使用过它。2.对于DDL
,无需使用COMMIT
。您好,我在存储过程中这样做是因为我需要安排一个队列来运行它(我不手动运行它,因此我不使用纯sql),对于变量,我使用了,但没有在此处显示代码。您需要在使用EXECUTE IMMEDIATE(ab)之前再考虑一下。您应该在纯SQL中完成它,在PL/SQL中到底需要做什么?在旁注上,1。您声明了一个变量,但从未使用过它。2.对于DDL
,无需使用COMMIT
。您好,我在存储过程中这样做是因为我需要安排一个队列来运行它(我不手动运行它,因此我不使用纯sql)变量,我确实使用了,但没有在这里显示代码。当你喜欢答案时,不要忘记接受正确答案并向上投票。当你喜欢答案时,不要忘记接受正确答案并向上投票。