Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.09.01;
Скачать: CL | DM;

Вниз

Как бы сделать в 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
2-1355773456
SKIPtr
2012-12-17 23:44
2013.09.01
полоса прокрутки для TPanel


15-1364145881
Ъ-Х
2013-03-24 21:24
2013.09.01
Чего бы сыграть на акустической гитаре?


1-1311171341
bestolkov
2011-07-20 18:15
2013.09.01
Преобразование чисел


15-1364473732
alexdn
2013-03-28 16:28
2013.09.01
Переносной принтер


2-1356156835
alexdn
2012-12-22 10:13
2013.09.01
DBGrid