sql >> データベース >  >> RDS >> Oracle

Oracle-属性レコードに応じて関係にルールを適用する方法(簡単な例)

    この制限は、cursestabelleの挿入後または更新後のトリガー内で確認できます。

    CREATE or replace TRIGGER check_leader
    AFTER INSERT OR UPDATE ON  Course
    FOR EACH ROW
    declare
      v_type varchar2(30);
    BEGIN
      select type into v_type from stuff where :NEW.leader_id = stuff.stuff_id;
      if v_type != 'teacher' then 
       RAISE_APPLICATION_ERROR(-20000, 'course leader must be teacher');
      end if;
    end;
    /
    

    ただし、スタッフテーブルに別のトリガーが必要です。スタッフタイプが変更された場合(教師からクリーナーに)、cursesテーブルのエントリを確認する必要があります。

    CREATE or replace TRIGGER check_courses
    AFTER UPDATE ON  STUFF
    FOR EACH ROW
    declare
      v_num number;
    BEGIN
      if :OLD.type = 'teacher' and :NEW.type != 'teacher' then
         select count(*) into v_num from curses where courses.leader_id = :NEW.stuff_id;
         if v_num > 0 then 
           RAISE_APPLICATION_ERROR(-20000, 'there are courses assigned ');
          end if;
      end if;
    end;
    /
    


    1. Mysqliパラメータバインディングの問題

    2. MySQL-カスタム列を検索

    3. サブストリングを含む行を検索するにはどうすればよいですか?

    4. PHPでutf8mb4文字をutf8に変換します