我正在使用Oracle 10g,而且我遇到了一些可能会起作用的代码问题。这让我疯狂。代码如下:
CREATE OR REPLACE TRIGGER trig_t1
AFTER INSERT ON t1
DECLARE
count1 INTEGER;
foo t1.field1%TYPE; --field is a VARCHAR2(20)
BEGIN
SELECT COUNT(1) INTO count1 --error in this line
FROM t1
WHERE condition;
foo:='bar';
UPDATE t1 SET field1=foo --error in this line
WHERE some condition ;
END;
它“编译错误”,所有类型都是“PLS-00382:表达式类型错误”。 我只是不明白......有人知道我的代码有什么问题吗?
答案 0 :(得分:2)
您可以发布T1
的定义吗?如果T1
有一个名为FIELD1
的列,那么您的代码似乎对我有用。您是否可能在表中有一个与本地变量共享名称的列?
SQL> create table t1( field1 varchar2(20) );
Table created.
SQL> create or replace trigger trg_t1
2 after insert on t1
3 declare
4 l_count1 integer;
5 foo t1.field1%type;
6 begin
7 select count(*)
8 into l_count1
9 from t1;
10
11 foo := 'bar';
12
13 update t1
14 set field1 = foo
15 where 1=1;
16 end;
17 /
Trigger created.
SQL> insert into t1 values( 'foo' );
1 row created.
SQL> select * from t1;
FIELD1
--------------------
bar