Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
alter table期间发生Oracle存储过程编译错误_Oracle_Stored Procedures - Fatal编程技术网

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)变量,我确实使用了,但没有在这里显示代码。当你喜欢答案时,不要忘记接受正确答案并向上投票。当你喜欢答案时,不要忘记接受正确答案并向上投票。