|
|
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Начал изучать ОРАКЛ(часть базы на него переезжает с 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 ???? Или как то иначе надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2018, 10:26 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
SergIvanov80как в итоге вернуть SELECT Namer, CountR, l_MaxC MaxCount FROM Table1 ???? Куда вернуть? Клиенту отдать - просто select. В переменную - select into, все верно. Test case дайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2018, 10:33 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
dmdmdmКуда вернуть? Клиенту отдать - просто select. Да, требуется просто вернуть клиенту итоговый Select ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2018, 10:37 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Клиентское приложение делает select, который может включать вызов функции, получает данные. Если хотите процедурный подход, используйте SYS_REFCURSOR. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2018, 10:47 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2018, 21:18 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Переписал с фетчем, работает 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; з.ы. Жаль непонятно что не так так с прошлым вариантом...всем спасибо) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2018, 22:24 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
SergIvanov80з.ы. Жаль непонятно что не так так с прошлым вариантом...всем спасибо)Да всё тут понятно - другая СУБД, другая парадигма, следовательно - другие подходы в решении аналогичных задач. Если вы до этого имели дело только с MS SQL Server, а сейчас переходите на Oracle, то много неожиданностей вас поджидает... В этих двух СУБД общего - сильно меньше, чем различающегося... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2018, 04:35 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
Щукина АннаЕсли вы до этого имели дело только с MS SQL Serverсудя по бесполезности трех из четырех приведенных mssql-строк, они не проистекают ни из знаний, ни из сына ошибок трудных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2018, 05:48 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
-2-судя по бесполезности трех из четырех приведенных mssql-строк, они не проистекают ни из знаний, ни из сына ошибок трудных.Бесполезное это ваше сообщение, которое не несет никакого смысла и пользы. Я просто привел простейший пример на MS SQL написанный за пару сек, меня интересовал общий смысл реализации подобного на ORACLE. Вы предлагаете мне публиковать многостраничный расчет зп участков продаж и отчетов по ним и спрашивать "а как сделать так же на ORACLE", смешно... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2018, 08:20 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
SergIvanov80интересовал общий смысл реализации подобного на ORACLE.В oracle, да и в mssql, подобное решается простым селектом. Причем одинаковым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2018, 09:01 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
SergIvanov80, должно заработать вот так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. В вашем варианте с циклом непонятно, что передается на выход функции. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2018, 09:13 |
|
||
|
Запрос из хранимой процедуры
|
|||
|---|---|---|---|
|
#18+
БельфяSergIvanov80, должно заработать вот так: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. В вашем варианте с циклом непонятно, что передается на выход функции.Попробую, спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2018, 10:21 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39693366&tid=1883544]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
147ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 252ms |
| total: | 506ms |

| 0 / 0 |
