Главная страница
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.008 c
15-1364278811
N.Cage
2013-03-26 10:20
2013.09.01
Amd vs Intel


10-1184751280
NoXXX
2007-07-18 13:34
2013.09.01
Array[0..7] Of Byte в Activex компонент, Как передать?


15-1364407192
ThreadMaster
2013-03-27 21:59
2013.09.01
Как нужно делать многопоточные приложения


15-1364544598
O'ShinW
2013-03-29 12:09
2013.09.01
Как бы сделать в Oraclе DML operation inside a query?


15-1363267161
brother
2013-03-14 17:19
2013.09.01
У кого Win7x64