Reputation: 33
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;
I want to do something like this in PL/SQL, but it throws me an error.
How should I do it?
Upvotes: 2
Views: 3819
Reputation: 332
Try this, should work
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;
/
kindly change as per your needs, should work
Upvotes: 0
Reputation: 39527
Problem is that you can't run DDL directly in PLSQL. You can run them in separate execute immediates:
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;
/
Upvotes: 3