Oracle триггер, чтобы ограничить нулевое значение на основе значения из другой таблицы - PullRequest
0 голосов
/ 23 сентября 2019

Не могли бы вы дать мне псевдо-пример кода триггера, как запретить (сообщение об исключении) нулевое значение в столбце 1 в таблице 1 на основе значения в столбце 2 из таблицы 2.Oracle 11g

Спасибо всем за помощь

Br, Trigger n00b

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019
CREATE OR REPLACE TRIGGER TR_n00b
  AFTER INSERT
  ON table1
  FOR EACH ROW
DECLARE
  CURSOR c_column2 (something1 in number)  --here you get the value of column2 from table2
  IS
  SELECT column2
  FROM table2
  where something = :something1;
  v_column2 number;
BEGIN
  open  c_column2(table1.something1); -- here you can send some parameter to get the column2 value
  fetch c_column2 into v_column2;
  close c_column2;

  if v_column2 < 5 and :new.column1 is null THEN 
 /*this checks the value of column2 and the value of colum1 and if both of this are 
 true then you will rise the error*/
    RAISE_APPLICATION_ERROR( -20001, 
    'Column1 of table11 can not be null if column2 is smaller than 5' );
  END IF;
END;
0 голосов
/ 23 сентября 2019

Вам нужен триггер что-то вроде следующего:

CREATE OR REPLACE TRIGGER TRG_NAME BEFORE
    INSERT OR UPDATE ON TABLE1
    FOR EACH ROW
    WHEN ( COLUMN1 IS NULL )
DECLARE
    V_CNT   NUMBER := 0;
BEGIN 
      SELECT
          COUNT(1)
      INTO V_CNT
      FROM
          TABLE2
WHERE COLUMN2....; -- YOUR CONDITION, IF TRUE THEN NULL IN COLUMN1 WILL NOT BE ALLOWED

    IF V_CNT > 0 THEN
        RAISE; -- RAISE ERROR IF V_CNT IS NOT ZERO
    END IF;

END TRG_NAME;
/

Ура !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...