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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрос на выборку в функции 
V
    Опции темы
zhefran
Дата 9.4.2010, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

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



Здравствуйте уважаемые.
Подскажите мне как написать функцию для такого SELECT:
Код

select sqname.currval from dual;


Я хочу узнавать текущее значение sequence передавая ее имя в функцию. Это реально?

--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
DimW
Дата 9.4.2010, 10:31 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(zhefran @  9.4.2010,  10:22 Найти цитируемый пост)
Это реально?

нет, текущее занечение сиквенса можно определить только получив его предварительно в этой же транзакции.

PM MAIL ICQ   Вверх
Zloxa
Дата 9.4.2010, 10:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



zhefran, вообще краткость далеко не всегда сестра таланта. Ваш вопрос можно трактовать многояко. Я полностью согласен с предыдущим оратором касательно заключения которого он дал по своей трактовке Вашей сентенции. Тем не менее я суть вопроса понял по другому. И мое понимание сути решается средствами динамического SQL. А касательно того, что ж Вам действительно надо, то Вам лишь ведомо.
Код

SQL> create sequence testseq;
 
Sequence created
SQL> create or replace function testseqf(seq_name varchar2) return number is
  2    result number;
  3  begin
  4    execute immediate 'select '||seq_name||'.currval from dual'
  5      into result;
  6    return result;
  7  end;
  8  /
 
Function created
SQL> select testseq.nextval, testseqf('testseq') from dual;
 
   NEXTVAL TESTSEQF('TESTSEQ')
---------- -------------------
         1                   1
 



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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

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



Zloxa, спасибо, это то, что нужно!

В целом мне нужно сделать аналог в Oracle функции MySQL  mysql_insert_id().
Функцию буду обязательно вызывать после инсерта.
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
DimW
Дата 9.4.2010, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Zloxa @  9.4.2010,  10:57 Найти цитируемый пост)
Тем не менее я суть вопроса понял по другому.

думаю мы суть вопроса поняли одинаково, просто на мой НЕТ, можно ответить - "да, НО..."  smile 
PM MAIL ICQ   Вверх
Zloxa
Дата 9.4.2010, 11:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(zhefran @  9.4.2010,  11:19 Найти цитируемый пост)
В целом мне нужно

А вот если бы Вы все таки озвучили что же вам нужно "в целом", то выяснилось бы что функция вам и в пень не вдулась, потому как что ни наесть рассово-кошерный способ достижения вашей цели - использовать returning кляузу оператора insert  smile 


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


Эксперт
***


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

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



Цитата(Zloxa @  9.4.2010,  11:39 Найти цитируемый пост)
использовать returning кляузу оператора insert 

ловко подмечено  smile 
PM MAIL ICQ   Вверх
zhefran
Дата 9.4.2010, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 237
Регистрация: 27.9.2007
Где: Винница-Киев-Ирпе нь-?, Украина

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



Я находил такое решение.

Код

declare 
i number;
begin
insert into testa(aname) values('тест') returning id into i;
end;


Но я не знаю как потом это i отправить в php страницу. 
--------------------
Ніщо нізвідки не виникає і нікуди не дівається!Лечение компьютеров от вирусов! Бесплатно!
PM MAIL WWW ICQ   Вверх
DimW
Дата 9.4.2010, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(zhefran @  9.4.2010,  12:29 Найти цитируемый пост)
как потом это i отправить в php страницу.  

Код

create procedure add_value(p_value in varchar2
                          ,p_curr_id out number)
as
begin
 insert into testa(aname) values(p_value) returning id into p_curr_id;
end; 


вызывай в PHP и обрабатывай OUT параметр(p_curr_id)
PM MAIL ICQ   Вверх
Zloxa
Дата 9.4.2010, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


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

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



Цитата(zhefran @  9.4.2010,  12:29 Найти цитируемый пост)
я не знаю как потом это i отправить в php страницу.  

Ох и как же далеко оказалась суть от изначально поставленного вопроса smile)))
И, по сути, выходит, вопрос должен звучать не в этот форум вовсе  smile 


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


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(Zloxa @  9.4.2010,  12:59 Найти цитируемый пост)
Ох и как же далеко оказалась суть от изначально поставленного вопроса 

 smile 

Цитата(zhefran @  9.4.2010,  11:19 Найти цитируемый пост)
В целом мне нужно сделать аналог в Oracle функции MySQL  mysql_insert_id().

только вот ты не учел что mysql_insert_id() работает для конкретно твоей сессии, а как ты обеспечишь, чтобы вставка в чужой сессии не изменяла текущего значения твоего sequence -а я не знаю smile

Это сообщение отредактировал(а) azesmcar - 9.4.2010, 13:03
PM   Вверх
DimW
Дата 9.4.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Zloxa @  9.4.2010,  12:59 Найти цитируемый пост)
И, по сути, выходит, вопрос должен звучать не в этот форум вовсе 

не совсем, здесь вопрос должен был быть "как ОТДАТЬ значение", а в форуме по ПХП, "как взять". smile 
PM MAIL ICQ   Вверх
azesmcar
Дата 9.4.2010, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(DimW @  9.4.2010,  13:06 Найти цитируемый пост)
не совсем, здесь вопрос должен был быть "как ОТДАТЬ значение", а в форуме по ПХП, "как взять". smile  

а как отдать он (по его же словам) знал smile
PM   Вверх
DimW
Дата 9.4.2010, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(azesmcar @  9.4.2010,  13:02 Найти цитируемый пост)
чтобы вставка в чужой сессии не изменяла текущего значения твоего sequence

насколько я понял из доки - не меняет, каждая сессия оперирует своими, после выпондения оператора который меняет инкрементное поле.

Добавлено через 3 минуты и 8 секунд
Цитата(azesmcar @  9.4.2010,  13:07 Найти цитируемый пост)
а как отдать он (по его же словам) знал

согласись - получение параметра из функции и из процедуры не одно и тоже, хотя возможно API для работы с конкретной БД делает это различие минимальным.
PM MAIL ICQ   Вверх
azesmcar
Дата 9.4.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 3
Всего: 211



Цитата(DimW @  9.4.2010,  13:10 Найти цитируемый пост)
насколько я понял из доки - не меняет, каждая сессия оперирует своими, после выпондения оператора который меняет инкрементное поле. 

хм..будет немного странно, а если мне нужно именно текущее значение? надо будет проверить.
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0589 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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