编译触发器时出现Oracle错误ORA-00922

问题描述

我在表中有一个varchar2数据类型列。用户只能在该列中插入数字,而我不想更改为数字。有时,在手动插入此列数据时,用户可以在列中留出空间。我创建了一个触发器来避免它。我写的触发器如下。

CREATE OR REPLACE trigger_name
BEFORE INSERT ON table
FOR EACH ROW 
BEGIN 
  IF :new.column != TRIM(:new.column) THEN
     :new.column := TRIM(:new.column);
  ELSE
   dbms_output.put_line(:new.column || ' is suitable for jobid');
END IF;
END;

编译上面的代码时出现如下错误。

“ ORA-00922:选项丢失或无效”

谢谢。

解决方法

错误ORA-00922是由Barbaros Özhan指出的关键字TRIGGER丢失引起的。只需添加它,并假设您正确设置了表名和列名,就可以了。


但要进一步查询,您似乎希望替换用户为该列输入的所有空格。如果是这样,此触发器可以做到:

CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON table_name
  FOR EACH ROW
BEGIN
  IF :new.column_name != REPLACE(:new.column_name,' ','') THEN
    :new.column_name := REPLACE(:new.column_name,'');
  ELSE
    dbms_output.put_line(:new.column_name|| ' is suitable for jobid');
  END IF;
END;

我添加了缺少的关键字trigger。 只需将table_namecolumn_name替换为其正确的名称即可,它应该可以工作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...