我不能在 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;
/