简体   繁体   中英

Oracle SQL Trigger Syntax

I am trying to create a trigger that checks if the faculty member to be added to the assigned table will is already on the qualified table for a specified class. Perhaps this is a tedious method. Nevertheless, I'd still like to know what I'm doing wrong. The following is my code with created the created tables and the trigger being the last part of the code:

CODE:

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;

However, I keep receiving an error saying:

Error at line 7: PLS-00225: subprogram or cursor 'F' reference is out of scope

  1. v_facNum number;
  2. BEGIN
  3. SELECT f.FId
  4. into v_facNum
  5. from Faculty f

Does anyone know what could be wrong?

That would be something like this (sample tables are really just a sample ; they are here to make the trigger compile):

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>

There are lots of issues in your code. You can check the count of records into FACULTY table and use that count for whatever logic you want.

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;
/

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM