powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос из хранимой процедуры
12 сообщений из 12, страница 1 из 1
Запрос из хранимой процедуры
    #39693360
SergIvanov80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал изучать ОРАКЛ(часть базы на него переезжает с MS SQL), просто вошел в ступор на простейшем вопросе, я наверное что то в совсем ином подходе не понимаю ((..

Код на MS SQL, т.е. просто вернули селект с максимальным значением в новом поле

DECLARE
@l_MaxC integer;

SELECT @l_MaxC=MAX(CountR) FROM Table1

SELECT Namer, CountR, @l_MaxC MaxCount FROM Table1


Код на Oracle
DECLARE
l_MaxC integer;

BEGIN
SELECT MAX(CountR) INTO l_MaxC FROM Table1

????

END;

Не понял как в итоге вернуть SELECT Namer, CountR, l_MaxC MaxCount FROM Table1 ????
Или как то иначе надо?
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693365
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergIvanov80как в итоге вернуть SELECT Namer, CountR, l_MaxC MaxCount FROM Table1 ????

Куда вернуть?
Клиенту отдать - просто select.
В переменную - select into, все верно.
Test case дайте.
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693366
SergIvanov80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdmКуда вернуть?
Клиенту отдать - просто select.
Да, требуется просто вернуть клиенту итоговый Select
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693368
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиентское приложение делает select, который может включать вызов функции, получает данные.
Если хотите процедурный подход, используйте SYS_REFCURSOR.
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693472
SergIvanov80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdmКлиентское приложение делает select, который может включать вызов функции, получает данные.
Если хотите процедурный подход, используйте SYS_REFCURSOR.В итоге переписал через SYS_REFCURSOR, потом другим способом через функцию с packages.

А вот решил попробовать с функцией без packages и возникли проблемы.


create or replace TYPE t_TestT as object
(
table1_id integer,
NameR varchar2(20),
CountR integer,
MaxC integer
);

create or replace TYPE t_TestTS as table of t_TestT


create or replace function f_RetTestT (id_Table integer) return t_TestTS pipelined
as

BEGIN
for rec in
(
select
T1.id,
T1.NameR,
T1.CountR
from
table1 T1
where
(T1.id = id_Table OR -1=id_Table)
)
loop
pipe row (rec);
end loop;

return;

end;

На строчке " pipe row (rec); " выдает ошибку
Error(18,10): PL/SQL: Statement ignored
Error(18,20): PLS-00382: expression is of wrong type
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693479
SergIvanov80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переписал с фетчем, работает

create or replace function f_RetTestT (id_Table integer) return t_TestTS pipelined
as

v_cur SYS_REFCURSOR;
v_res t_TestT:=t_TestT(Null, Null,Null, Null);

BEGIN

OPEN v_cur FOR
select
T1.id,
T1.NameR,
T1.CountR,
T1.maxc
from
table1 T1
where
(T1.id = id_Table OR -1=id_Table) ;

LOOP
FETCH v_cur INTO
v_res.table1_id,
v_res.NameR,
v_res.CountR,
v_res.MaxC;

EXIT WHEN v_cur%NOTFOUND;
PIPE ROW(v_res);

END LOOP;

RETURN;

end;

з.ы. Жаль непонятно что не так так с прошлым вариантом...всем спасибо)
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693498
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergIvanov80з.ы. Жаль непонятно что не так так с прошлым вариантом...всем спасибо)Да всё тут понятно - другая СУБД, другая парадигма, следовательно - другие подходы в решении аналогичных задач.
Если вы до этого имели дело только с MS SQL Server, а сейчас переходите на Oracle, то много неожиданностей вас поджидает... В этих двух СУБД общего - сильно меньше, чем различающегося...
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693500
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина АннаЕсли вы до этого имели дело только с MS SQL Serverсудя по бесполезности трех из четырех приведенных mssql-строк, они не проистекают ни из знаний, ни из сына ошибок трудных.
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693518
SergIvanov80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
-2-судя по бесполезности трех из четырех приведенных mssql-строк, они не проистекают ни из знаний, ни из сына ошибок трудных.Бесполезное это ваше сообщение, которое не несет никакого смысла и пользы. Я просто привел простейший пример на MS SQL написанный за пару сек, меня интересовал общий смысл реализации подобного на ORACLE.
Вы предлагаете мне публиковать многостраничный расчет зп участков продаж и отчетов по ним и спрашивать "а как сделать так же на ORACLE", смешно...
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693523
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergIvanov80интересовал общий смысл реализации подобного на ORACLE.В oracle, да и в mssql, подобное решается простым селектом. Причем одинаковым.
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693524
Бельфя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SergIvanov80, должно заработать вот так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace function f_RetTestT(id_Table integer) return t_TestTS
  pipelined as

begin
  for rec in (select t_TestT(table1_id => T1.id
                     	        ,NameR => T1.NameR
                               ,CountR => T1.CountR
                                 ,MaxC => null) res_row
                from table1 T1
               where (T1.id = id_Table or - 1 = id_Table))
  loop
    pipe row(rec.res_row);
  end loop;
  return;
end;


В вашем варианте с циклом непонятно, что передается на выход функции.
...
Рейтинг: 0 / 0
Запрос из хранимой процедуры
    #39693562
SergIvanov80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
БельфяSergIvanov80, должно заработать вот так:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create or replace function f_RetTestT(id_Table integer) return t_TestTS
  pipelined as

begin
  for rec in (select t_TestT(table1_id => T1.id
                     	        ,NameR => T1.NameR
                               ,CountR => T1.CountR
                                 ,MaxC => null) res_row
                from table1 T1
               where (T1.id = id_Table or - 1 = id_Table))
  loop
    pipe row(rec.res_row);
  end loop;
  return;
end;


В вашем варианте с циклом непонятно, что передается на выход функции.Попробую, спасибо.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос из хранимой процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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