Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

как объявить переменные в Oracle 9i

40K
30 марта 2010 года
devil_incarnate
32 / / 16.07.2009
Подскажите, как объявить переменную в sql, как присвоить ей значение.
пересмотрел много литературы, но видно мало, раз не нашёл.
заранее спасибо!
6
30 марта 2010 года
George
4.1K / / 05.01.2007
хм. не знаю как в оракле, но по стандарту что-то вроде вот такого:
[highlight=sql]DECLARE VARIABLE varname vartype[/highlight]
416
30 марта 2010 года
MaitreDesir
380 / / 02.01.2008
Где именно нужно объявить переменную? В пакете? В процедуре? Просто в запросе?
В пакете переменные объявляются в секции declare, в процедуре - после заголовка. Если вам надо в простом запросе объявить процедуру код такой:
 
Код:
declare
  variable_a    typename;
begin
  текст_запроса
end;

А насчет литературы - быть того не может. Это есть везде, хоть у Тома Кэйта, хоть в First Steps.
40K
31 марта 2010 года
devil_incarnate
32 / / 16.07.2009
Цитата: MaitreDesir

А насчет литературы - быть того не может. Это есть везде, хоть у Тома Кэйта, хоть в First Steps.


за литературу спасибо - скачал, почитаю.

пробывал такое

 
Код:
declare variable1 integer;

- но оно не работает, поэтому и обратился за помощью на форуме. выдаёт:
11:58:12 PL/SQL: SQL Statement ignored

нужна переменная глобальная, чтоб можно было использовать во временных таблицах к примеру

 
Код:
declare date1  date,date2  date;
with table_1 as (запрос, в к-м используется переменные),
with table_2 as (запрос, в к-м используется переменные)
select *
from table_1,table_2
where
-- и тут использовать переменную к примеру
-- и т.д.
6
31 марта 2010 года
George
4.1K / / 05.01.2007
Ну книжки скачали же - почитайте. Не, ну как дети малые. В MS SQL например перед именем ставился знак @. Мало ли какие "финты" могут быть у оракла - чтите маны.
416
01 апреля 2010 года
MaitreDesir
380 / / 02.01.2008
Цитата: devil_incarnate

пробывал такое
 
Код:
declare variable1 integer;

- но оно не работает, поэтому и обратился за помощью на форуме. выдаёт:
11:58:12 PL/SQL: SQL Statement ignored



Вот совершенно небывает так. Только что вбил девятке

 
Код:
declare
  variable1  number;
begin
  select 1 into variable1 from dual;
  dbms_output(varibale1);
end;

так он не только не ругался, а еше и на вывод радостно напечатал единичку.

А насчет глобальных переменных - это конечно здорово, но лично я бы Вам посоветовал не заниматься объявлением глобальных переменных, а уж если сильно надо - использовать механизмы переменных окружения oracle. У Тома кстати все это описано, и даже обосновано.
8.2K
01 апреля 2010 года
Ora-cool
211 / / 20.09.2007
Автор, вам, возможно, просто нужно пересмотреть подход к проектированию. По своему опыту, такие задачи, когда есть необходимость использования каких-либо глобальных переменных, бывают очень редко. Ну а если все-таки без этого никак обойтись не удается - как подсказал MaitreDesir, используйте оракловый контекст.
40K
01 апреля 2010 года
devil_incarnate
32 / / 16.07.2009
проблема заключатся в том, что пишу запросы в приложении Quest Software SQL Navigator и оно не поддерживает PL\SQL и весь практически SQL*Plus

и на все мои дествия обычно ответ такой:
[1]: Statement: SQL*Plus command ignored.
либо
[1]: PL/SQL: SQL Statement ignored
416
01 апреля 2010 года
MaitreDesir
380 / / 02.01.2008
Цитата: devil_incarnate
проблема заключатся в том, что пишу запросы в приложении Quest Software SQL Navigator и оно не поддерживает PL\SQL и весь практически SQL*Plus



А что же тогда оно поддерживает??? Бред какой то. Вообще то pl\sql и практически весь SQL*Plus там поддерживается. Писал в нем раньше, и весь вышеприведенный код там работает. Слез только по причине тормозов. В конце концов, а что мешает потестить ваш код из другой среды? Из той же консоли sqlplus?

40K
01 апреля 2010 года
devil_incarnate
32 / / 16.07.2009
работает с закомментированной одной строчкой.
 
Код:
declare
  variable1  number;
begin
  select count(a.id) into variable1 from sr_bank.sr$account a;
--dbms_output(varibale1);
end;


но не пойму как мне поместить в переменную значение и работать с этой переменной потом.
мне бы объявить переменную или константу, а потом использовать её. всё что нужно.
 
Код:
variable1  number := 19817;

но видимо моего понимания и знаний мне не хватает.
416
01 апреля 2010 года
MaitreDesir
380 / / 02.01.2008
 
Код:
declare
  variable1  number;
begin
  varable1:=19817;
--работаешь с ней
end;
8.2K
02 апреля 2010 года
Ora-cool
211 / / 20.09.2007
Цитата: devil_incarnate
работает с закомментированной одной строчкой.
 
Код:
declare
  variable1  number;
begin
  select count(a.id) into variable1 from sr_bank.sr$account a;
--dbms_output(varibale1);
end;


Да, жжошь!)
В этой одной строчке 2 ошибки: во-первых, dbms_output.put_line, а во-вторых, "variable1", а не "varibale1".

40K
07 апреля 2010 года
devil_incarnate
32 / / 16.07.2009
Цитата: Ora-cool
Да, жжошь!)
В этой одной строчке 2 ошибки: во-первых, dbms_output.put_line, а во-вторых, "variable1", а не "varibale1".



ошибся когда постил на форуме. а вообще верно было написано в навигаторе.

по теме.

 
Код:
Declare  
   first_day DATE;
   last_day DATE;
BEGIN
   first_day := to_date('01.04.2010','dd.mm.yyyy');
   last_day := to_date('10.04.2010','dd.mm.yyyy');
END;

вот так вроде работает. как мне тогда использовать переменные first_day, last_day в простом запросе типа такого.
 
Код:
select * from sr_bank.sr$contract c where c.END_DATE = first_day
8.2K
07 апреля 2010 года
Ora-cool
211 / / 20.09.2007
Варианты:

1. Использовать контекст Оракла (уже говорилось).
2. Сохранять значение не в переменной, а в таблице (например, во временной).
3. Привести описание задачи, зачем это вообще надо.
40K
08 апреля 2010 года
devil_incarnate
32 / / 16.07.2009
Цитата: Ora-cool
Варианты:

1. Использовать контекст Оракла (уже говорилось).
2. Сохранять значение не в переменной, а в таблице (например, во временной).
3. Привести описание задачи, зачем это вообще надо.



да всё довольно банально. по роду деятельности приходится часто писать скрипты для получения данных. часто потом приходится менять в скиптах даты и др., поэтому когда скрипт большой уже приходится часто CTRL+H и заменять часть скрипта., переменные очень бы упростили задачу, да и надо как-то расти - объявление переменных, констант - это то что нужно уже сейчас.

40K
08 апреля 2010 года
devil_incarnate
32 / / 16.07.2009
 
Код:
with table1 as (
       select unique(a.open_date) date1
       from sr_bank.SR$account a
       where a.open_date = TO_DATE('10.04.2009','dd.mm.yyyy')
)
select * from sr_bank.SR$account a
where
a.open_date in (select table1.date1 from table1)


вот так работает, но, согласитесь, так писать скрипт тупо. потому хотелось бы объявить переменную Date1 или константу Date1 и использовать её потом.

 
Код:
a.open_date = Date1
8.2K
08 апреля 2010 года
Ora-cool
211 / / 20.09.2007
В скрпитах sql-plus можно задавать переменные подстановки. Эти переменные во всех местах скрипта будут заменяться на указанное значение (введенное пользователем с клавиатуры или заданное в самом скрипте).
40K
12 апреля 2010 года
devil_incarnate
32 / / 16.07.2009
буду юзать пока временные таблицы.
 
Код:
with имя_таблицы as (select '9812' as number1, '9845' as number2,... from vsio_ravno_kakaya_table)

В них создавать поля с необходимыми значениями, потому что по другому не работает. либо ограничение какое стоит, либо руки кривые у меня, как только не пробывал. не работают ваши советы. но всё равно всем спасибо за подсказки! зы всем +
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог