【问题标题】:Oracle Trigger, initialize a variableOracle触发器,初始化一个变量
【发布时间】:2014-05-10 02:42:40
【问题描述】:

当我在 SQLPLUS 中执行此脚本时,我遇到了一个错误,告诉我声明“ENSI”(第 11 行)并声明“ENIT”(第 12 行),但我只需要将我的变量初始化为那些String 知道为什么吗?

create or replace trigger ETUDIANT_TRIGGUER
Before update on ETUDIANT
for each row 
declare
  c number;
  id_edu ETUDIANT.id_etu%TYPE := :new.id_etu;
  NOM ETUDIANT.NOM%TYPE := :new.NOM;
  adresse ETUDIANT.adresse%TYPE := :new.adresse;
  cursus ETUDIANT.cursus%TYPE := :new.cursus;
  UNIVERSITE ETUDIANT.UNIVERSITE%TYPE := :new.UNIVERSITE;
  SITE_ENSI ETUDIANT.UNIVERSITE%TYPE := "ENSI";
  SITE_ENIT ETUDIANT.UNIVERSITE%TYPE := "ENIT";
begin
if :new.ID_ETU is null then
raise_application_error(-20001,'ID_ETU est null');    
end if;
select count(*) into c from ETUDIANT_ensi@site_ensi_link where ID_ETU= :new.ID_ETU;
if c > 0 then
raise_application_error(-20002, 'ID_ETU existe déjà dans le site _ensi');
end if;
select count(*) into c from ETUDIANT_enit@site_enit_link where ID_ETU= :new.ID_ETU;
if c > 0 then
raise_application_error(-20002, 'ID_ETU existe déjà dans le site _enit');
end if;  
if UPPER(UNIVERSITE)=SITE_ENSI then
insert into ETUDIANT_ensi@site_ensi_link values(id_edu,NOM,adresse,cursus,NB_EMPRUNTS,UNIVERSITE);
end if;    
if UPPER(UNIVERSITE)=SITE_ENIT then
insert into ETUDIANT_enit@site_enit_link values(id_edu,NOM,adresse,cursus,NB_EMPRUNTS,UNIVERSITE);
end if;  
end;
/

【问题讨论】:

    标签: triggers oracle11g sqlplus


    【解决方案1】:

    [pl]SQL 中的字符串文字用单引号括起来,而不是用双引号括起来。 因此,您应该替换以下两行:

    SITE_ENSI ETUDIANT.UNIVERSITE%TYPE := "ENSI";
    SITE_ENIT ETUDIANT.UNIVERSITE%TYPE := "ENIT";
    

    这两个:

    SITE_ENSI ETUDIANT.UNIVERSITE%TYPE := 'ENSI';
    SITE_ENIT ETUDIANT.UNIVERSITE%TYPE := 'ENIT';
    

    【讨论】:

    • 我测试过但它返回:ORA-00984: Column Not Allowed
    • @MohammedAliKachbouri - 但不是来自同一行,来自insert,对吧?所以这确实是一个新问题;但这是因为您有范围问题。当您在 values 子句中引用 id_edu 等时,它们被解释为表中的列,而不是变量 - 因为它们具有相同的名称,所以令人困惑。要么更改你的局部变量名称,要么 - 因为我不确定你为什么要使用它们 - 只是参考 :new.id_edu 那里。
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 2018-12-29
    相关资源
    最近更新 更多