我有一組sql語句(創建表,視圖,序列),其中我的模式名稱始終發生更改,其餘部分與sql相同。 即使在架構名稱中,它的一部分也必須更改,例如: 我有一個schema
名稱ABC_XYZ
,我想將此架構名稱更改爲ABC_DEF_XYZ
。 爲此,我嘗試在模式名稱中插入一個變量,如ABC_&var1_XYZ
。如果我在模式名稱中傳遞變量(ABC_&var1_XYZ
)並將值傳遞給變量,它會要求我聲明變量的值。 我已經給出了錯誤,下面的代碼我使用:動態更改/替換變量的值-oracle
Error report -
ORA-06550: line 5, column 52:
PLS-00201: identifier 'REL4' must be declared
ORA-06550: line 5, column 1:
PL/SQL: Statement ignored
ORA-06550: line 7, column 51:
PLS-00201: identifier 'REL4' must be declared
這裏是我創建語句:
set echo off
set verify off
undefine mySchemaPart
declare
vSQL varchar2(32767);
begin
vSQL:= 'begin EXECUTE IMMEDIATE alter table ABC_'||&&mySchemaPart||'_OWNER.TEST drop constraint EMPLOYEE_ID_FK; EXCEPTION when others then if (SQLCODE != -02443 and SQLCODE != -942) then RAISE; end if; end';
execute immediate vSQL;
vSQL:= 'begin EXECUTE IMMEDIATE drop table ABC_'||&mySchemaPart||'_OWNER.TEST cascade constraints PURGE; EXCEPTION when others then if SQLCODE != -942 then RAISE; end if; end';
execute immediate vSQL;
vSQL:= 'create table ABC_'||&mySchemaPart||'OWNER.TEST
(
EMPLOYEE_ID NUMBER(19) not null,
LAST_UPDT_DT DATE not null,
)';
execute immediate vSQL;
vSQL:= 'CREATE OR REPLACE SYNONYM ABC_USER.TEST FOR ABC_'||&mySchemaPart||'OWNER.TEST';
execute immediate vSQL;
vSQL:= 'begin EXECUTE IMMEDIATE alter table ABC_'||&mySchemaPart||'OWNER.TEST
add constraint EMPLOYEE_ID_FK foreign key (EMPLOYEE_ID)
references ABC_OWNER.GDSD (EMPLOYEE_ID); EXCEPTION when others then if (SQLCODE != -02443 and SQLCODE != -02275) then RAISE; end if; end';
execute immediate vSQL;
end;
/
有沒有其他辦法可以嘗試在此方案中插入我的價值。
請發佈您的代碼的相關部分 – Aleksej
如何使用'execute immediate'? – Plirkee
您不能在創建表格時簡單地傳遞該變量。如果要進行參數化,則需要使用PLSQL塊。請參閱下面的示例 – XING