选择进入的Oracle类型错误

时间:2011-11-17 15:53:14

标签: oracle

我正在使用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:表达式类型错误”。 我只是不明白......有人知道我的代码有什么问题吗?

1 个答案:

答案 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