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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объявление и использование параметра в SQL, Как объявить параметер :parameter 
V
    Опции темы
ivashkanet
  Дата 18.4.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Всем привет. 
Столкнулся с вопросом объявления параметра в обычном SQL для оракла. Перелопатил Гугль и нифига не нашел :( Может не так искал.

На MSSQL делал бы так:
Код
declare @parameter varchar(100)
set @parameter = 'value'

SELECT * From blablabla
WHERE someField = @parameter


Как сделать такое же в Оракл?


Зарание спасибо, ivashkanet
PM MAIL WWW ICQ   Вверх
DimW
Дата 18.4.2008, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



в sql + запускаешь:

Код

variable x number
exec :x := 10
select 'x='||:x result from dual where 10 = :x;

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


Кодю потиху
****


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

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



DimW, не хочет работать :( 
А что есть SQL +?

Добавлено через 1 минуту и 39 секунд
Запускается только в Command window. 
А никак нельзя сделать то же, но для обычного SQL?
PM MAIL WWW ICQ   Вверх
DimW
Дата 18.4.2008, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



sql + это и есть практически command window.
судя из вопроса я понял что тебе нужно имееноо это.

выполни вот это:
Код

select 'x='||:x result from dual where 10 = :x;

в test window, предворительно проскань параметры.

если опят не то, но обьясни подробнее в чем дело...
PM MAIL ICQ   Вверх
ivashkanet
Дата 18.4.2008, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



У меня есть довольно объемный SQL. В нем в разных местах идут проверка:
Код
 WHERE o.production_order_number = '610100000224'
   AND o.operation_number = '0050'


Так вот хотелось бы задать :production_order_number и :operation_number в шапке программы, что бы при изменении не бегать по тексту SQL и исправлять одно и то же.

Код
 WHERE o.production_order_number = :production_order_number
   AND o.operation_number =:operation_number



P.S. К стыду своему ничего не знаю про test window (открыл его, он на меня несколько раз наругался и я его закрыл smile )/
Где можно про это почитать? Исенно азы про возможности представляемые Ораклом.
PM MAIL WWW ICQ   Вверх
DimW
Дата 18.4.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(ivashkanet @  18.4.2008,  11:34 Найти цитируемый пост)
 К стыду своему ничего не знаю про test window 

я просто решил что ты используешь pl/sql developer. но неважно.

Цитата(ivashkanet @  18.4.2008,  11:34 Найти цитируемый пост)
Так вот хотелось бы задать :production_order_number и :operation_number в шапке программы, что бы при изменении не бегать по тексту SQL и исправлять одно и то же.


параметры sql запроса определяются след. образом:

:<имя параметра>

а вот как передать значения параметера в sql тебе виднее. должны быть методы у языка на которм ты создаешь приложение которые отвечают за передачу параметра по имени.

импровизирую для наглядности:

Код

query.add('select 'x='||:x result from dual where 10 = :x');
query.setParameterByName('x', form1.edittext1.value);
query.exec;
 

а начать изучение оракла можно от сюда: http://www.firststeps.ru/sql/oracle/

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


Кодю потиху
****


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

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



Цитата(DimW @  18.4.2008,  11:47 Найти цитируемый пост)
я просто решил что ты используешь pl/sql developer

В точку
Цитата(DimW @  18.4.2008,  11:47 Найти цитируемый пост)
а вот как передать значения параметера в sql тебе виднее. должны быть методы у языка на которм ты создаешь приложение которые отвечают за передачу параметра по имени.

Это-то я использую. И давно (больше года).

Вопрос в том, например, как протестить эти SQL перед тем как забивать в код? Что-то я отношусь с подозрением к Command Window smile

Т.е. Задача такая:
1) есть SQL 'select 'x='||:x result from dual where 10 = :x' 
2) нужно его проверить через pl/sql developer и SQL окно
3) для этого нужно объявить и проинициализировать параметр  :x

Как сделать 3?
PM MAIL WWW ICQ   Вверх
DimW
Дата 18.4.2008, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(ivashkanet @  18.4.2008,  11:55 Найти цитируемый пост)
Как сделать 3?

как это сделать я показал в первом посте.
учитывая что ты испольжуешь pl/sql developer это можно сделать только в command window.

предлогаю более простой и наглядный способ:
1) открываешь test window и грохаешь от туда все что он сам нагенерил.
2) в чистый редактор вставляешь свой sql с именованными параметрами.
3) правой мышкой жмешь на вторую половину данного окна расположенную в низу экрана и выбираешь scan variables
 после чего он сканит твой sql и находин в нем имена параметров, далее подставляешь значение параметров и F8.
результат смотришь на закладке sql output


PM MAIL ICQ   Вверх
ivashkanet
Дата 18.4.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


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

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



Понятно, такого как MSSQL 
Цитата(ivashkanet @  18.4.2008,  10:09 Найти цитируемый пост)
declare @parameter varchar(100)
set @parameter = 'value'

сделать нельзя.

Цитата(DimW @  18.4.2008,  12:04 Найти цитируемый пост)
предлогаю более простой и наглядный способ:

Ок, спасибо.
PM MAIL WWW ICQ   Вверх
DimW
Дата 18.4.2008, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



пожалуйста.

[quote=ivashkanet, 18.4.2008,  12:21, post1483604]Понятно, такого как MSSQL  сделать нельзя./quote]


ivashkanet, это:
Код

declare @parameter varchar(100)
set @parameter = 'value'


эквивалентно этому:
Код

variable x number
exec :x := 10


но тк ты используешь pl/sql developer в виду его особенностей этого нельзя сделать в одном окне с запросом. точно знаю что есть инструменты которые позволяют все делать в одном окне.
ЭТО НЕ ПОБЛЕМА ОРАКЛА - ЭТО ИНСТРУМЕНТ ТАК РЕАЛИЗОВАН

Это сообщение отредактировал(а) DimW - 18.4.2008, 12:57
PM MAIL ICQ   Вверх
Vas
Дата 18.4.2008, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Попробуйте выполнить в pl/sql developer в запросе перед параметром вместо ":" ставить "&".
Он сам попрсит вас ввести значения параметров.



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
pompei
Дата 14.5.2008, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



В PL/SQL Developer-е
1) Создаёшь test-window (на рис. п. 1)
2) В области declare пишешь любые переменные (на рис. п. 2)
3) Используешь их между begin/end как хочешь.
4) F8 - запускаешь
5) Смотришь результаты (на рис. п. 3)
user posted image

Это сообщение отредактировал(а) pompei - 14.5.2008, 05:14
--------------------
А всё оказывается гораздо проще: пассивные наноструктуры - активные наноструктуры - системы наносистем - молекулярные наносистемы - сингулярность! По пять лет на каждый этап.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Oracle"
Zloxa
LSD

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

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

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

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

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


 




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


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

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