【发布时间】:2015-06-04 15:23:00
【问题描述】:
CREATE OR REPLACE TRIGGER P88
AFTER INSERT ON reparation
FOR EACH ROW
DECLARE
vope number;
BEGIN
SELECT observation_reparation into vope from repartion;
if(vope IS NULL)THEN
EXECUTE IMMEDIATE 'ALTER TABLE ' || reparation.observations_Reparation || ' MODIFY libelle_piece NVARCHAR2(50)';
END IF;
END;
/
我明白了:
错误:表或视图不存在。
【问题讨论】:
-
我知道您混淆了模式名称、表名称和列名称。触发器在 REPARATION 上,您选择列 OBSERVATION_REPARATION 并从模式 REPARATION 中截断表 OBSERVATIONS_REPARATION。您实际要截断哪个表以及它在什么架构中?
-
@davegreen100 如果未指定observations_Réparation 字段,我想这样做,触发器将自动在其位置插入libelle_piece
-
好的,我明白了,但是您要修改哪个表?真的是reparation.observations_Reparation
-
@davegreen100 名称表是修复我想使用立即执行修改列 observation_Reparation 为 libelle_piece
-
您能备份并解释您要解决的问题吗?为什么要从触发器发出 DDL?从技术上讲,这是行不通的。 DDL 语句隐式结束事务,并且不允许触发器结束事务,因此不允许触发器执行 DDL。通常,不允许从该表查询表上的行级触发器,因此您的
SELECT可能会生成变异表异常。在您要插入的表上执行 DDL 似乎从根本上被误导了。
标签: sql oracle plsql oracle11g