Ошибка типа Oracle с выбором в - PullRequest
1 голос
/ 17 ноября 2011

Я использую 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 Ответ

2 голосов
/ 17 ноября 2011

Можете ли вы опубликовать определение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...