簡體   English   中英

Oracle SQL 觸發語法

[英]Oracle SQL Trigger Syntax

我正在嘗試創建一個觸發器來檢查要添加到分配表的教員是否已經在指定 class 的合格表上。 也許這是一種乏味的方法。 盡管如此,我仍然想知道我做錯了什么。 以下是我的代碼,其中創建了創建的表,觸發器是代碼的最后一部分:

代碼:

CREATE TABLE Faculty (
  FId varchar(10),
  FName varchar(20),
  CONSTRAINT Faculty_ID_pk PRIMARY KEY(FId)
);

CREATE TABLE Course (
  CId varchar(10),
  CName varchar(20),
  CONSTRAINT Course_ID_pk PRIMARY KEY(CId)
);

CREATE TABLE Qualify (
  QDate DATE,
  FId varchar(10),
  CId varchar(10),
  CONSTRAINT Qualifying_date CHECK(QDate >= TO_DATE('2020-08-24', 'YYYY-MM-DD')),
  CONSTRAINT Qualify_FID_fk FOREIGN KEY(FId) REFERENCES Faculty(FId),
  CONSTRAINT Qualify_CID_fk FOREIGN KEY(CId) REFERENCES Course(CId)
);

CREATE TABLE Assign (
  ADate DATE,
  FId varchar(10),
  CId varchar(10),
  CONSTRAINT Qualifying_check CHECK(ADate > TO_DATE('2020-08-24', 'YYYY-MM-DD')),
  CONSTRAINT Assign_FID_fk FOREIGN KEY(FId) REFERENCES Faculty(FId),
  CONSTRAINT Assign_CID_fk FOREIGN KEY(CId) REFERENCES Course(CId)
);



CREATE OR REPLACE TRIGGER Check_If_Qualified
   BEFORE INSERT ON Assign
   FOR EACH ROW
DECLARE
   v_facNum number;
BEGIN
   SELECT f.FId
      into v_facNum
      from Faculty f
      where f.facnum = :new.fid;
END;

但是,我不斷收到一條錯誤消息:

第 7 行錯誤:PLS-00225:子程序或 cursor 'F' 引用超出 scope

  1. v_facNum 編號;
  2. 開始
  3. SELECT f.FId
  4. 進入 v_facNum
  5. 從教師 f

有誰知道可能出了什么問題?

那將是這樣的(示例表實際上只是一個示例;它們在這里是為了使觸發器編譯):

SQL> create table assign (fid number);

Table created.

SQL> create table faculty (facnum number, fid number);

Table created.

SQL> CREATE OR REPLACE TRIGGER Check_If_Qualified
  2    BEFORE INSERT ON Assign
  3    FOR EACH ROW
  4  DECLARE
  5    v_facNum number;
  6  BEGIN
  7     SELECT f.FId
  8       into v_facNum
  9       from Faculty f
 10       where f.facnum = :new.fid;
 11
 12    -- now do something with v_facNum
 13  END;
 14  /

Trigger created.

SQL>

您的代碼中有很多問題。 您可以將記錄計數檢查到FACULTY表中,並將該計數用於您想要的任何邏輯。

CREATE OR REPLACE TRIGGER CHECK_IF_QUALIFIED 
    BEFORE INSERT ON ASSIGN
    FOR EACH ROW
DECLARE
    CNT   NUMBER;
BEGIN
    SELECT COUNT(1)
      INTO CNT
      FROM FACULTY
     WHERE FACNUM = :NEW.FID;
END;
/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM