Returning ROWID with Insted of TRIGGER

VovaH
Дата: 11.03.2011 19:56:08
Добрый день,

Мне надо добавить новую запись в View который имеет INSTEAD OF TRIGGER.

Gateway который я изпользую для подключения к database автомоточески добавляет RETURNING ROWID в конце insert statement и из за этого я получаю ошибку

автор
ORA-22816: unsupported feature with RETURNING clause Cause: RETURNING clause is currently not supported for object type columns, LONG columns, remote tables, INSERT with subquery, and INSTEAD OF Triggers.


Мой вопрос - возможно ли не запрашивать/отменить RETURNING ROWID (может исплоьзуя HINT)

Note: У меня нет возможности поменять VIEW или TRIGGER, так что решение должно бить на уровне statement который я посылаю

Спасибо.
AmKad
Дата: 11.03.2011 21:14:01
VovaH,

Переопределить инсерт, добавив комментарий, можете?
+
SQL> drop table t1 purge;

Таблица удалена.

SQL> create table t1(id number, name varchar2(10));

Таблица создана.

SQL>
SQL> declare
  2  l_row varchar2(100) := 'insert into t1(id, name) values(:b1, :b2) --';
  3
  4  procedure SendSQL(p_sql varchar2, p_id number, p_str varchar2) is
  5  begin
  6      execute immediate l_row || ' returning rowid' using p_id, p_str;
  7  end;
  8
  9  begin
 10      SendSql(l_row, 1, 'First Row');
 11  end;
 12  /

Процедура PL/SQL успешно завершена.

SQL>
SQL> select * from t1;

        ID NAME
---------- ----------
         1 First Row

SQL>
VovaH
Дата: 11.03.2011 21:56:19
я посылаю

INSERT INTO MY_VIEW (Column1,Column2) VALUES ('Value1','Value2')

но database получает как

INSERT INTO MY_VIEW (Column1,Column2) VALUES ('Value1','Value2') RETURNING ROWID INTO :MyVar
AmKad
Дата: 11.03.2011 22:03:53
VovaH
я посылаю

INSERT INTO MY_VIEW (Column1,Column2) VALUES ('Value1','Value2')

но database получает как

INSERT INTO MY_VIEW (Column1,Column2) VALUES ('Value1','Value2') RETURNING ROWID INTO :MyVar

А ты не думал что будет, если database получит так?
INSERT INTO MY_VIEW (Column1,Column2) VALUES ('Value1','Value2') --RETURNING ROWID INTO :MyVar
AmKad
Дата: 11.03.2011 22:15:04
Хотя далее наверное последует ORA-01006.
MaDak
Дата: 11.03.2011 22:49:33
AmKad,

returning null into :MyVar --
AmKad
Дата: 11.03.2011 23:14:17
MaDak
AmKad,

returning null into :MyVar --

Это поможет автору обойти ORA-22816?
Кто-то уже как бе
Дата: 12.03.2011 07:06:42
VovaH, штука в том, что база источник не может получить гарантии, что на той стороне будет вставлена именно одна строка. Потому и никаких RETURNING быть не может. Там вставку надо разбивать на два этапа, на первом что-то типа:
select seq_pk_tbl_id.nextval@otherdb into MyVal from dual;
и только потом вставлять это значение. Вот это место никакими HINT вы не опишите, только ручками.