Форум: "Прочее";
Текущий архив: 2013.09.01;
Скачать: [xml.tar.bz2];
ВнизКак бы сделать в Oraclе DML operation inside a query? Найти похожие ветки
← →
O'ShinW © (2013-03-29 12:09) [0]С тем, что бы использовать
Insert into SomeTable (Id, ..... ) values ( GetNewId("SomeText"), ..... )
где
create or replace function GetNewId(p_NAME in varchar) return number is
Result number;
begin
select SEQ_ND_ID.NextVal into Result from dual;
insert into Tab_FOO(ID, NAME) values (Result, p_NAME);
-- Естественно, ORA-14551: cannot perform a DML operation inside a query
return(Result);
end GetNewId;
Читаю совет
Myfunction looks like this
create or replace function myFunction return varchar2 as
begin
update emp set empno = empno +1 where empno = 0;
return "Yeah";
end;
/
SQL> insert into emp (empno, ename) values (0, "TEST");
1 row created.
SQL> var myVar VARCHAR2
SQL> SELECT myFunction INTO :myVar FROM DUAL;
SELECT myFunction INTO :myVar FROM DUAL
*
ERROR at line 1:
ORA-14551: cannot perform a DML operation inside a query
ORA-06512: at "SCOTT.MYFUNCTION", line 3
ORA-06512: at line 1
The solution concerns using different syntax, such as below:
You need to use the syntax:
SQL> var myVar VARCHAR2
SQL> call myFunction() INTO :myVar;
Call completed.
но я хочу именно
>> DML operation inside a query
например, insert into ... select GetNewId("SomeText"), остальные поля
Можно "вывернуться"?
Аудит не предлагайте, это не то.
Требование - заносить сквозные ID в таблицу, с комментариями. Причем, эта таблица первична. Нельзя никуда вставить новый ID? предварительно не занеся в нее.. FK-PK, короче
← →
O'ShinW © (2013-03-29 12:11) [1]
> Нельзя никуда вставить новый ID?
? = ,
Подозреваю, что ерунду хотят.
Но такое требование, не знаю зачем это надо
← →
Игорь Шевченко © (2013-03-29 12:52) [2]
> Insert into SomeTable (Id, ..... ) values ( GetNewId("SomeText"),
> ..... )
values (select GetNewId("SomeText") from dual,
← →
Медвежонок Пятачок © (2013-03-29 13:18) [3]прагма афтономус транзакшон
внутри функции
← →
O'ShinW © (2013-03-29 14:55) [4]
> прагма афтономус транзакшон
так заработало.
+ ниже
> values (select GetNewId("SomeText") from dual,
Раньше не работало, было так: Вариант1
create or replace function MF_ARGUS.NewND(p_NAME in varchar) return number is
Result number;
begin
select MF_ARGUS.SEQ_ND_ID.NextVal into Result from dual;
insert into MF_ARGUS.tabfoo values (result, p_NAME);
return(Result);
end NewND;
преписал как: Вариант2
create or replace function MF_ARGUS.NewND(p_NAME in varchar) return number
as PRAGMA AUTONOMOUS_TRANSACTION; Result number;
begin
select MF_ARGUS.SEQ_ND_ID.NextVal into Result from dual;
insert into MF_ARGUS.tabfoo values (result, p_NAME);
commit;
return(Result);
end NewND;
как сказал выше, Вариант 2 заработал..
НО,
вернул назад(случайно, так получилось, не в том окне нажал)
Сейчас откатилось к варианту1, еще раз привожу
create or replace function MF_ARGUS.NewND(p_NAME in varchar) return number
is Result number;
begin
select MF_ARGUS.SEQ_ND_ID.NextVal into Result from dual;
insert into MF_ARGUS.tabfoo values (result, p_NAME);
return(Result);
end NewND;
Пробую
insert into mf_argus.tabfoo2 (FOO, NAME)
values (MF_ARGUS.NewND("test"), "test2");
Все ok..
insert into mf_argus.tabfoo2 F (FOO, NAME)
select MF_ARGUS.NewND("test2"), T.NAME from applic.T_TOWN T;
Все ok..
А раньше не работало. Я ж не придумал ошибку ORA-14551:, она была..
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.09.01;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.002 c