Oracle SQL Синтаксис триггера - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь создать триггер, который проверяет, находится ли преподаватель, который будет добавлен в назначенную таблицу, уже в квалифицированной таблице для указанного класса. Возможно, это утомительный метод. Тем не менее, я все еще хотел бы знать, что я делаю неправильно. Ниже приведен мой код с созданными созданными таблицами и триггером, являющимся последней частью кода:

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;

Однако я получаю сообщение об ошибке:

Ошибка в строке 7: PLS-00225: ссылка на подпрограмму или курсор 'F' выходит за рамки

номер v_facNum; НАЧАТЬ ВЫБРАТЬ f.FId в v_facNum с факультета f

Делает Кто-нибудь знает, что может быть не так?

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

В вашем коде много проблем. Вы можете проверить количество записей в таблице FACULTY и использовать это количество для любой логики c, которую вы хотите.

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;
/
0 голосов
/ 09 апреля 2020

Это было бы что-то вроде этого (примеры таблиц на самом деле просто выборка ; они здесь для компиляции триггера):

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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...