Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вернуть в Delphi-процедуру значение полей после IN, Вернуть в Delphi-процедуру значение поле 
:(
    Опции темы
Matrex
Дата 25.10.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 31.1.2006

Репутация: нет
Всего: 2



Доброго времени суток коллеги!

Подскажите можно ли вернуть в Delphi-процедуру значение полей после выполнения конструкции INSERT INTO для Oracle (необходимо получить значение идентификатора который будет сгенерирован триггером на стороне сервера при добавлении записи). Для работы с Oracle использую DOA.

PM MAIL   Вверх
LSD
Дата 25.10.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Из триггера ничего вернуть нельзя. Тут или на клиенте получать значение сиквенса, или написать функцию которая будет делать INSERT и возвращать значение.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Matrex
Дата 25.10.2011, 11:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 96
Регистрация: 31.1.2006

Репутация: нет
Всего: 2



Цитата(LSD @  25.10.2011,  11:34 Найти цитируемый пост)
Тут или на клиенте получать значение сиквенса


Сейчас я так и делаю. Это просто вопрос оптимизации. Хотелось часть работы переложить на сервер что бы меньше "гонять" данные по сетке... Думал, что может сервак на INSERT INTO отвечает типа "все ок. я добавил следующие данные ... ... ... ...". А получается что нет... 

PM MAIL   Вверх
DimW
Дата 25.10.2011, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(Matrex @  25.10.2011,  11:28 Найти цитируемый пост)
можно ли вернуть в Delphi-процедуру значение полей после выполнения конструкции INSERT INTO для Oracle


можно:

Код

procedure get_values(p_id out number, p_value out varchar2)
as
begin
  insert into table
    (id, value)
  values
    (seq.nextval, 'value1')
  returning id, value into p_id, p_value;
end;


Даже если значение из сиквенса берется в триггере, то returning все равно его вернет.
Вернее вернет не значение сиквенса, а значение которое содержит поле id.
PM MAIL ICQ   Вверх
LSD
Дата 25.10.2011, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(DimW @  25.10.2011,  14:06 Найти цитируемый пост)
можно:

Цитата(LSD @  25.10.2011,  12:34 Найти цитируемый пост)
или написать функцию которая будет делать INSERT и возвращать значение



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 25.10.2011, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



чтобы использовать returning, вовсе не обязательно insert в функцию заворачивать. Он и без функции прекрасно работает  smile 

Это сообщение отредактировал(а) Zloxa - 25.10.2011, 15:40


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 25.10.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Zloxa @  25.10.2011,  16:37 Найти цитируемый пост)
чтобы использовать returning, вовсе не обязательно insert в функцию заворачивать. Он и без функции прекрасно работает

Если верить документации:
user posted image
там требуется указание INTO. Что там надо указать если это не PL/SQL и как это получить в программе?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
DimW
Дата 25.10.2011, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 23
Всего: 44



Цитата(LSD @  25.10.2011,  16:28 Найти цитируемый пост)
Что там надо указать если это не PL/SQL и как это получить в программе? 

анонимный блок:

Код

begin
  insert into table
    (id, value)
  values
    (seq.nextval, 'value1')
  returning id, value into :p_id, :p_value;
end;


ЗЫ. "без функции" - это не значит без PL/SQL.

Это сообщение отредактировал(а) DimW - 25.10.2011, 17:03
PM MAIL ICQ   Вверх
LSD
Дата 25.10.2011, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(DimW @  25.10.2011,  18:01 Найти цитируемый пост)
ЗЫ. "без функции" - это не значит без PL/SQL.

1.
Цитата(LSD @  25.10.2011,  17:28 Найти цитируемый пост)
как это получить в программе?

2. Каждый раз компилировать анонимный PL/SQL блок, это явно плохая оптимизация.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 25.10.2011, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(LSD @  25.10.2011,  16:28 Найти цитируемый пост)
 Что там надо указать если это не PL/SQL...? 

Бинд же!
Код

SQL> create table hello (id number);
 
Table created
SQL> var result number;
SQL> insert into hello values (dbms_random.value) returning id into :result;
 
1 row inserted
result
---------
0.982520208181514


Это сообщение отредактировал(а) Zloxa - 25.10.2011, 21:19


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Zloxa
Дата 25.10.2011, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(LSD @  25.10.2011,  17:33 Найти цитируемый пост)
2. Каждый раз компилировать анонимный PL/SQL блок, это явно плохая оптимизация. 

Откуда, кстати, дровишки что прям таки "каждый раз"?

Код

SQL> begin
  2    -- LSD рулит!!!
  3    null;
  4  end;
  5  /
 
PL/SQL procedure successfully completed
SQL> select rownum, t.sql_text from v$sqlarea t where t.sql_text like '%-- LSD рулит!!!%';
 
    ROWNUM SQL_TEXT
---------- --------------------------------------------------------------------------------
         1  select rownum, t.sql_text from v$sqlarea t where t.sql_text like '%-- LSD рулит
         2  begin   -- LSD рулит!!!   null; end;
 
SQL> 

Цитата

V$SQLAREA lists statistics on shared SQL area and contains one row per SQL string. It provides statistics on SQL statements that are in memory, parsed, and ready for execution.


Это сообщение отредактировал(а) Zloxa - 25.10.2011, 21:12


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 26.10.2011, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Zloxa @  25.10.2011,  21:44 Найти цитируемый пост)
Бинд же!

Этот ваш SQL Plus не показатель smile 
Я так и не смог из Java выполнить SELECT INTO, и у меня есть сильная уверенность, что без использования OCI это не провернуть.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 26.10.2011, 13:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(LSD @  26.10.2011,  12:12 Найти цитируемый пост)
 SELECT INTO

select into, в отличии от returning это чисто pl/slq-ная фишка.
Цитата(LSD @  26.10.2011,  12:12 Найти цитируемый пост)
без использования OCI 

Озвученный ТС DOA использует OCI
Цитата(LSD @  26.10.2011,  12:12 Найти цитируемый пост)
Этот ваш SQL Plus не показатель

Не, мы конечно держим в уме, что в этой вашей Жаве все намного хуже чем в Делфи, но неужели же настолько  smile 


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
LSD
Дата 26.10.2011, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 18
Всего: 538



Цитата(Zloxa @  26.10.2011,  14:23 Найти цитируемый пост)
select into, в отличии от returning это чисто pl/slq-ная фишка.

returning тоже не работает, ошибку не выбрасывает, но возвращает фигню.


Цитата(Zloxa @  26.10.2011,  14:23 Найти цитируемый пост)
Не, мы конечно держим в уме, что в этой вашей Жаве все намного хуже чем в Делфи, но неужели же настолько

Но при это упускаете из виду, что драйвер пишет Oracle.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Zloxa
Дата 26.10.2011, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 37
Всего: 161



Цитата(LSD @  26.10.2011,  14:27 Найти цитируемый пост)
returning тоже не работает, ошибку не выбрасывает, но возвращает фигню.

Да, я тоже попробовал. Действительно ситуация весьма и весьма уныла. Но анонмный pl/sql блок как воркэраунд - вполне  себе канает.

Цитата(LSD @  26.10.2011,  14:27 Найти цитируемый пост)
Но при это упускаете из виду, что драйвер пишет Oracle. 

Если уж на то пошло, то и Жава уже давно Оракл, неужели только лишь от этого печали должно бы стать меньше?



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

Данный раздел предназначен для обсуждения проблем с Oracle Database, другие продукты Oracle здесь не обсуждаются. Просьба при создании темы, придерживаться следующих правил:

  • при создании темы давайте ей осмысленное название, описывающее суть проблемы
  • указывайте используемую версию базы, способ соединения и язык программирования
  • при ошибках обязательно приводите код ошибки и сообщение сервера
  • приводите код в котором возникла ошибка, по возможности дайте тестовый пример демонстрирующий ошибку
  • при вставке кода используйте соответсвующие теги: [code=sql] [/code] для подсветки SQL и PL/SQL кода, [code=java] [/code] - для Java, и т.д.

  • документация по Oracle: 9i, 10g, 11g
  • книги по Oracle можно поискать здесь
  • действия модераторов можно обсудить здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, LSD.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Oracle | Следующая тема »


 




[ Время генерации скрипта: 0.1106 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.