powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не работает запрос в PLSQL
10 сообщений из 10, страница 1 из 1
не работает запрос в PLSQL
    #32120952
roboforce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
есть запрос, который работает при обычном вызове.

select sysdate paymentdate1,
(select max(pm2.paymentdate) from payment pm2 where pm2.payerid=4024969) paymentdate2 from dual
union
select z.paymentdate as paymentdate1,
( select max(pm1.paymentdate) from payment pm1
where pm1.paymentdate<z.paymentdate
and pm1.payerid=4024969
) as paymentdate2
from (
select pm.paymentdate
from payment pm
where pm.payerid=4024969
order by pm.paymentdate desc) z
order by 1 desc

Если я пытаюсь вставить его в PLSQL - код, таким образом

for FS in(
select sysdate paymentdate1,
(select max(pm2.paymentdate) from payment pm2 where pm2.payerid=4024969) paymentdate2 from dual
union
select z.paymentdate as paymentdate1,
( select max(pm1.paymentdate) from payment pm1
where pm1.paymentdate<z.paymentdate
and pm1.payerid=4024969
) as paymentdate2
from (
select pm.paymentdate
from payment pm
where pm.payerid=4024969
order by pm.paymentdate desc) z
order by 1 desc)
loop
...
end loop;

То получаю сообщение, что мол мой вложеный селект
не ожидался.
Научите, как побороть это.
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32120971
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставить версию Oracle поновее :)
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32120983
roboforce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До чего обидно.
пытался вставить в код функции.
рабочий запрос

select months_between(r1,r2) from(
select sysdate r1,
(select max(nvl(pm2.paymentdate,to_date('01.01.1999','dd.mm.yyyy'))) from payment pm2 where pm2.payerid=4024969) r2 from dual
union all
select z.paymentdate r1,
( select max(pm1.paymentdate) from payment pm1
where pm1.paymentdate<z.paymentdate
and pm1.payerid=4024969
) r2
from (
select distinct pm.paymentdate
from payment pm
where pm.payerid=4024969
order by pm.paymentdate desc) z
)
where months_between(r1,r2)>1

и в результате оракле ругается на (select max(nvl(....
Я уж без for FS in( - пытался. А все зря.
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32120992
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
I pravil'no rugaetsya..
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32120995
klavs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
надо писать INTO
а то ему не понятно куда селек-то делать ?
select ... into .... from ...
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32120997
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 klavs:: select was opened in cursor's mode..
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32121028
roboforce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
klawsу
я в курсе, что нада писать
select ... into ....

И я также в курсе, что такая конструкция тоже не работает -

declare
fs number(10,3);
begin
select months_between(r1,r2) into fs from(
select sysdate r1,
(select max(nvl(pm2.paymentdate,to_date('01.01.1999','dd.mm.yyyy'))) from payment pm2 where pm2.payerid=4024969) r2 from dual
union all
select z.paymentdate r1,
( select max(pm1.paymentdate) from payment pm1
where pm1.paymentdate<z.paymentdate
and pm1.payerid=4024969
) r2
from (
select distinct pm.paymentdate
from payment pm
where pm.payerid=4024969
order by pm.paymentdate desc) z
)
where months_between(r1,r2)>1;
end;

A ГЛАВНОЕ, хочу спросить у Вас ЧТО МНЕ ДЕЛАТЬ?
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32121057
DimaR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я же уже ответил, или переписать запрос без селекта на который ругаеться.
Какая версия оракла?
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32121084
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Poidet?
Select months_between(r1,r2)
from (
select sysdate r1
, pm.paymentdate r2
, max(nvl(pm2.paymentdate,to_date('01.01.1999','dd.mm.yyyy'))
OVER (PARTITION BY pm.payerid) AS rmax
from payment pm
where pm.payerid=4024969
order by pm.paymentdate desc)
where r2 = rmax
and months_between(r1,r2)>1;
...
Рейтинг: 0 / 0
не работает запрос в PLSQL
    #32121104
roboforce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
версия Oracle 8i

а такое вот работает
declare
-- Local variables here
TYPE cv_typ IS REF CURSOR;
cv cv_typ;
r11 number(10,2);
begin
-- Test statements here
OPEN cv FOR
' select r1 from(
select months_between(sysdate,
(select max(pm2.paymentdate) from payment pm2 where pm2.payerid=4024969)) r1 from dual
union
select months_between(z.paymentdate,
( select max(pm1.paymentdate) from payment pm1
where pm1.paymentdate<z.paymentdate
and pm1.payerid=4024969
)) r1
from (
select pm.paymentdate
from payment pm
where pm.payerid=4024969
order by pm.paymentdate desc) z
)';
LOOP
FETCH cv INTO r11;
EXIT WHEN cv%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (
TO_CHAR (r11));
END LOOP;
CLOSE cv;
end;
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / не работает запрос в PLSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]