多个 alter table in execute immediate

multiple alter table in execute immediate

BEGIN
  execute immediate '
    BEGIN
        ALTER TABLE EMPRESA ADD CONSTRAINT pk_empresa_id PRIMARY KEY (EMPRESA_ID);

        ALTER TABLE CLIENTE ADD CONSTRAINT pk_cliente_id PRIMARY KEY (CLIENTE_ID);
    END';
END;

我想在 PL/SQL 中做这样的事情,但它会抛出一个错误。

我应该怎么做?

问题是您不能 运行 直接在 PLSQL 中进行 DDL。您可以 运行 它们分别立即执行:

BEGIN
    execute immediate 'ALTER TABLE EMPRESA ADD CONSTRAINT pk_empresa_id PRIMARY KEY (EMPRESA_ID)';
    execute immediate 'ALTER TABLE CLIENTE ADD CONSTRAINT pk_cliente_id PRIMARY KEY (CLIENTE_ID)';
END;
/

试试这个,应该有用

SET DEFINE OFF;
SET SQLBLANKLINES ON;
SET SERVEROUTPUT ON;

DECLARE
  column_exists exception;
  pragma exception_init (column_exists, -01430);

begin
  DBMS_OUTPUT.PUT_LINE ('ALTER TABLE STUDENT TO ADD HISTORY_MKS, ENGLISH_MKS, MATH_MKS');
  execute immediate 'alter table STUDENT add(
    HISTORY_MKS NUMBER,
    ENGLIST_MKS NUMBER,
    MATH_MKS    NUMBER
    )';
  exception when column_exists then null;
end;
/

请根据您的需要进行更改,应该可以工作