Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Есть ли в oracle аналог Exec  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Есть ли в оракле возможность выполнить запрос, который хранится в переменной.

как, например на ms sql:
declare @a  varchar(1000);
set @a = 'select 1';
exec(a);

Заранее благодарен
17 янв 08, 17:27    [5167592]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
execute immediate например
17 янв 08, 17:28    [5167607]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
Madness
Member

Откуда: Москва
Сообщений: 648
Execute Immediate
17 янв 08, 17:28    [5167609]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Чет не могу разобраться, если не сложно не могли бы вы этот кусочик с ms sql первести на oracle:

declare
@date datetime,
@month int,
@year int,
@sql_text varchar(1000);

--------temp-------
set @month = 11;
set @year = 2007;
-------------------

set @date = convert(datetime,'1.'+cast(@month as varchar(2))+'.'+cast(@year as varchar(4))  ,104)
set @sql_text = '';

while month(@date) = @month 
begin
set @sql_text = @sql_text + ',' + convert(varchar(10),@date,104);
set @date = @date +1;
end;

exec ('select '''+ @sql_text+''' as result');


Заранее спасибо!
17 янв 08, 18:01    [5167913]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
BERSERC
первести на oracle:
..


declare
 d date;
begin
  d := to_date('01.11.2007','dd.mm.yyyy');
end;
17 янв 08, 18:10    [5167974]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
если один в один :

declare
 v_date date;
 v_month int;
 v_year int;
 v_sql_text varchar2(1000);
 result varchar2(4000);
begin
 --------temp-------
 v_month := 11;
 v_year := 2007;
 -------------------

 v_date := to_date('01.' || v_month || '.' || v_year, 'DD.MM.YYYY');

 while to_char(v_date,'MM') = v_month loop
  v_sql_text := v_sql_text || ',' || to_char(v_date,'DD.MM.YYYY');
  v_date := v_date +1;
 end loop;

 execute immediate ('select ''' || v_sql_text || ''' as result from dual') into result;
end;
17 янв 08, 18:11    [5167987]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
BERSERC
Member

Откуда:
Сообщений: 442
допутсим на
declare
 d date;
begin
  d := to_date('01.11.2007','dd.mm.yyyy');
select d;
end;

оракл уже ругается,
и еще я не понял почему есть ли в оракле функция month() ? (year() работает а месяц нет :()
17 янв 08, 18:12    [5167995]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
BERSERC
допутсим на
declare
 d date;
begin
  d := to_date('01.11.2007','dd.mm.yyyy');
 select d;
end;

оракл уже ругается,
и еще я не понял почему есть ли в оракле функция month() ? (year() работает а месяц нет :()


это - не моё
17 янв 08, 18:14    [5168008]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
month нет, year у вас корее всего самописный. используйте to_char с соотв. маской
17 янв 08, 18:15    [5168013]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
BERSERC
Member

Откуда:
Сообщений: 442
orawish , да я знаю :) это я дописал, вот понять не могу, почему сразу после присвоения нельзя сделать select :((

Pir большое тебе спасибо, но этот код, как я понял выводит результат в табличку result, а нельзя ли сделать, чтоб он сразу в окно редактора запроса возвращал перечисление?
17 янв 08, 18:18    [5168029]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
Евгений_25
Member

Откуда: Харьков
Сообщений: 460
BERSERC

select d;


ищи
SELECT ... INTO ... from dual 
17 янв 08, 18:21    [5168036]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
Pir
Member

Откуда: Москва
Сообщений: 872
BERSERC
orawish , да я знаю :) это я дописал, вот понять не могу, почему сразу после присвоения нельзя сделать select :((

Pir большое тебе спасибо, но этот код, как я понял выводит результат в табличку result, а нельзя ли сделать, чтоб он сразу в окно редактора запроса возвращал перечисление?


result это переменная)
добавьте перед end
dbms_output.put_line(substr(result,1,255))

(если у вас версия субд > 10.1 - снимите ограничение в 255 символов)
17 янв 08, 18:22    [5168041]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
jan2ary
Member

Откуда: Киев
Сообщений: 1780
В оракле select должен быть откуда-то, а в pl/sql блоке еще и куда-то.
Я так понимаю, его нужно вывести на печать? Тогда это будет
dbms_output.put_line(to_char(d, 'dd.mm.yyyy'));
предварительно включив вывод
set serveroutput on
17 янв 08, 18:23    [5168049]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
BERSERC
orawish , да я знаю :) это я дописал, вот понять не могу, почему сразу после присвоения нельзя сделать select :((

Pir большое тебе спасибо, но этот код, как я понял выводит результат в табличку result, а нельзя ли сделать, чтоб он сразу в окно редактора запроса возвращал перечисление?

дык, всё можно.. только вы же не познакомили никого с вашим редактором запроса
17 янв 08, 18:23    [5168051]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Pir, спасибо, прикольная вещь, это как я понял аналог print :)

а почему если вводишь конструкцию begin .. end то уже select нельзя использовать?
я вот так пробую:
declare
 v_date date;
 v_month int;
 v_year int;
 v_sql_text varchar2(1000);
 result varchar2(4000);
begin
 --------temp-------
 v_month := 11;
 v_year := 2007;
 -------------------

 v_date := to_date('01.' || v_month || '.' || v_year, 'DD.MM.YYYY');

 while to_char(v_date,'MM') = v_month loop
  v_sql_text := v_sql_text || ',' || to_char(v_date,'DD.MM.YYYY');
  v_date := v_date +1;
 end loop;

execute immediate ('select ''' || v_sql_text || ''' as result from dual') into result;

select 'Строчка №1' from dual;
UNION
select 'Строчка №2' from dual;
end;
17 янв 08, 18:28    [5168075]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Потому что это уже PL/SQL, а не SQL, и здесь надо результат запроса сохранять в переменную.
17 янв 08, 18:35    [5168124]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
BERSERC
Member

Откуда:
Сообщений: 442
Чет никак не въеду :)
допустим пытаюсь перевести в оракл след. кусок кода:
declare
@a int;
select @a

по моей, логике в oracle должно быть так:
 
declare
 a int;
 begin
 select a from dual;
 end;

но опять таки не пашет :((
17 янв 08, 18:37    [5168134]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
Евгений_25
Member

Откуда: Харьков
Сообщений: 460
BERSERC
Чет никак не въеду :)
допустим пытаюсь перевести в оракл след. кусок кода:
declare
@a int;
select @a

по моей, логике в oracle должно быть так:
 
declare
 a int;
 begin
 select a from dual;
 end;

но опять таки не пашет :((


читайте внимательнее ответы которые вам пишут
по вашей логике в oracle должно быть так:

 
declare
 a number;
 begin
 select 1 into a from dual;
 end;

тобишь, мы что то выбираем (в примере 1) и куда то ложем (в примере into a), а еще откуда то берем (в примере from dual)
17 янв 08, 18:42    [5168168]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
CoJI
Member

Откуда:
Сообщений: 2275
Можно вопрос? А зачем вам этот "перевод" с T-SQL на PL/SQL? Если действительно интересно как PL/SQL работает, то может книжку какую посмотреть? Конкретные ответы на часные воопросы не помогут разобраться в языке в целом. ИМХО
17 янв 08, 18:46    [5168186]     Ответить | Цитировать Сообщить модератору
 Re: Есть ли в oracle аналог Exec  [new]
BERSERC
Member

Откуда:
Сообщений: 442
спасибо, кое-что пронял :)
18 янв 08, 09:51    [5169726]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить