我不能在 if 语句中放入 select 查询。我应该如何更换它?
I can't put a select query in the if statement. How should I replace it?
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF :new.year_production < (select extract(year from sysdate) from dual) OR :new.year_production< (1817) THEN
RAISE_APPLICATION_ERROR (-20000, 'ERROR!');
END IF;
END;
我无法在 if 语句中放入 select 查询。我该如何更换?
您不需要子查询。只是:
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF :new.year_production < extract(year from sysdate) OR :new.year_production < 1817 THEN
RAISE_APPLICATION_ERROR (-20000, 'ERROR!');
END IF;
END;
请注意,第二个条件,即根据 1817 年检查年份是不必要的...除非您打算调整系统日期并将其设置为早于 1817 年的日期!
您可以使用 extract
无需查询,也可以使用 <any
如下:
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF :new.year_production <any (extract(year from sysdate),1817) THEN
RAISE_APPLICATION_ERROR (-20000, 'ERROR!');
END IF;
END;
/
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF :new.year_production < (select extract(year from sysdate) from dual) OR :new.year_production< (1817) THEN
RAISE_APPLICATION_ERROR (-20000, 'ERROR!');
END IF;
END;
我无法在 if 语句中放入 select 查询。我该如何更换?
您不需要子查询。只是:
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF :new.year_production < extract(year from sysdate) OR :new.year_production < 1817 THEN
RAISE_APPLICATION_ERROR (-20000, 'ERROR!');
END IF;
END;
请注意,第二个条件,即根据 1817 年检查年份是不必要的...除非您打算调整系统日期并将其设置为早于 1817 年的日期!
您可以使用 extract
无需查询,也可以使用 <any
如下:
CREATE OR REPLACE TRIGGER my_trigger
BEFORE INSERT ON my_table
FOR EACH ROW
BEGIN
IF :new.year_production <any (extract(year from sysdate),1817) THEN
RAISE_APPLICATION_ERROR (-20000, 'ERROR!');
END IF;
END;
/