Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 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
15-1364463473
boriskb
2013-03-28 13:37
2013.09.01
Россиянин победил в международном конкурсе программистов Facebook


2-1355929661
sas9568635
2012-12-19 19:07
2013.09.01
Написать Компилятор языка Дельфи (Паскаль)


1-1312192872
Zoro
2011-08-01 14:01
2013.09.01
Работа с gzip.dll


15-1364323263
TStas
2013-03-26 22:41
2013.09.01
Как узнать, как войти в БИОС ноутбука?


15-1354481915
Конь Як
2012-12-03 00:58
2013.09.01
Веб программирование





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский