powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы [новые:3] / Просто Трёп [закрыт для гостей] [новые:3] / бНОПНЯ про орацле, Поиск: Искать сообщения, созданные автором: ZаЛупина  
24 сообщений из 24, страница 1 из 1
Просто Трёп / бНОПНЯ про орацле
    #436815
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
вот допустим делаем так
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
create or replace procedure test_proc
(p_param in VARCHAR2 )
as
v_qry varchar2(1000);
begin
    v_qry := 'select '''||p_param||''' z from dual';
    dbms_output.put_line(p_param);
    dbms_output.put_line(v_qry);
end test_proc;
и в дбмс он напишет всё, как полагается
ыск3.png
теперь пишем функцию!
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace function test_func
(p_param in VARCHAR2 )
return varchar2 SQL_MACRO
is
v_qry varchar2(1000);
begin
    v_qry := 'select '''||p_param||''' z from dual';
    dbms_output.put_line(p_param);
    dbms_output.put_line(v_qry);

return v_qry;
end test_func;
и делаем select * from test_func('xyz')
scr2.png
бНОПНЯ: почему он в первом случае параметр увидел и вернул нам, как и просили. а во втором случае - нет?
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436820
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
а вот эта строка от функции
dbms_output.put_line(v_qry);

выдаёт
2323.png
т.е. функция параметр не видит
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436855
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 12:59
[игнорируется]
в общем убери нахуй этот SQL_MACRO
так мне надо, чтобы можно было селектить эту функцию
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436858
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
Камикадзо  21.06.2023, 13:02
[игнорируется]
ZаЛупина  21.06.2023, 12:35
[игнорируется]
select * from test_func('xyz')
что это за хуета?

может так надо?
select test_func('xyz') fom dual
нет, см. SQL_MACRO
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436860
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
идея была кинуть через параметры в функцию всё, что надо,чтобы там собрался запрос, ф-ция вернула данные уже по этому запросу
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436861
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
это либо бага, либо недоработка, или так нельзя делать, но тогда хотелось бы понять логику , которой руководствовались разрабы оракла
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436882
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
Камикадзо  21.06.2023, 13:11
[игнорируется]
ZаЛупина  21.06.2023, 13:06
[игнорируется]
идея была кинуть через параметры в функцию всё, что надо,чтобы там собрался запрос, ф-ция вернула данные уже по этому запросу
а какой смысл собирать запрос? это неэффективно.
но было бы красиво в коде
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436955
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 13:28
[игнорируется]
ZаЛупина  21.06.2023, 13:16
[игнорируется]
Камикадзо  21.06.2023, 13:11
[игнорируется]
ZаЛупина  21.06.2023, 13:06
[игнорируется]
идея была кинуть через параметры в функцию всё, что надо,чтобы там собрался запрос, ф-ция вернула данные уже по этому запросу
а какой смысл собирать запрос? это неэффективно.
но было бы красиво в коде
DBMS_SQL
хотел сделать чз макро
ну ладно

вообще, странно работает
если написать
Цитата 
[игнорируется]
return q'{select p_param z from dual}';
то select * from test_func('xyz')
вернёт
яяяя.png
а если
Код: SQL
1.
return q'{select 'z' p_param from dual}';
то
ыыыыы.png
т.е. он параметр то понимает, то нет
но больше боли доставило то, что он не позволяет оперировать параметром в коде. он видит его значение как NULL, что бы ты в нём не передал
...
Изменено: 21.06.2023, 14:08 - ZаЛупина
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436993
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 14:16
[игнорируется]
потому что это СТРОКА, а не код
строка
почему он её не принтит в дбмс_аут ? (т.е. почему он её считает нуллом)
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #436994
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
Мудило  21.06.2023, 14:17
[игнорируется]
BDSM_SQL
[:bdsm]
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #437004
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 14:26
[игнорируется]
ZаЛупина  21.06.2023, 14:25
[игнорируется]
eNose  21.06.2023, 14:16
[игнорируется]
потому что это СТРОКА, а не код
строка
почему он её не принтит в дбмс_аут ? (т.е. почему он её считает нуллом)
полный код функции покажи
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace function test_func
(p_param in VARCHAR2 )
return varchar2 SQL_MACRO
is
v_qry varchar2(1000);
begin
    v_qry := 'select '''||p_param||''' z from dual';
    dbms_output.put_line(p_param);
    dbms_output.put_line(v_qry);

return v_qry;
end test_func;
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #437011
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
т.е. функция вот так параметр поймёт, как NULL
v_qry := 'select '''||p_param||''' z from dual';

а вот так - как то, что в нём пришло
v_qry := 'select p_param z from dual';

в этом и загогулина
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #437014
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 14:32
[игнорируется]
dbms_output.put_line(p_param);
dbms_output.put_line(v_qry);

что из них выдает нулл?
первая
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #437020
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 14:34
[игнорируется]
ты покажи вывод dbms, а не результат выполнения функции
ZаЛупина  21.06.2023, 12:41
[игнорируется]
а вот эта строка от функции
dbms_output.put_line(v_qry);

выдаёт
2323.png
т.е. функция параметр не видит
это последовательное выполнение
dbms_output.put_line(p_param);
dbms_output.put_line(v_qry);
сначала пустая строка
дальше селект, но с пустыми кавычками
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #437086
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 14:58
[игнорируется]
если ты помечаешь функцию как sql_macro, то надо сразу return делать, так как это будет не pl/sql.
это боль
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #437106
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
eNose  21.06.2023, 15:05
[игнорируется]
ZаЛупина  21.06.2023, 15:03
[игнорируется]
eNose  21.06.2023, 14:58
[игнорируется]
если ты помечаешь функцию как sql_macro, то надо сразу return делать, так как это будет не pl/sql.
это боль
ты же сам написал, что это МАКРОС
но упорно пытаешься в sql вхуячить pl/sql
раз они в оракле обозвали это функцией, то должны были позаботиться, чтобы pl/sql внутри функции тоже работал полноценно с параметрами
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #494620
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
допустим, есть такая таблица
2023-07-31_182851.png
cd - код
p_cd - его родительский

на нижних ветках некие числа
надо поднять их в виде сумм на родительские коды
2023-07-31_183057.png
в виде запроса
если в условии во 2й табл указать только один год, то всё работает. с двумя годами начинается непонятное
хотя, казалось бы, коррелированная табл под суммой связана годом

короч, вопрос. как это развернуть, чтобы он отдавал суммы как надо, и считал правильно?
Код: PL/pgSQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
with tmp (yr, cd, cd_p, q) as
(
select 2022 , 1 , NULL , 0 from dual union all
select 2022 , 2 , 1 , 0 from dual union all
select 2022 , 3 , 1 , 0 from dual union all
select 2022 , 4 , 2 , 100 from dual union all
select 2022 , 5 , 3 , 200 from dual union all
select 2023 , 1 , NULL , 0 from dual union all
select 2023 , 2 , 1 , 0 from dual union all
select 2023 , 3 , 1 , 0 from dual union all
select 2023 , 4 , 2 , 300 from dual union all
select 2023 , 5 , 3 , 400 from dual
),
t as
(select * from tmp /* where  yr=2022 */)
select -- пересуммируем родительские из чайлдов
yr,
cd,
cd_p,
q,
(select sum(t2.q) from (select  * from t where t.yr=t1.yr)  t2 start with t2.cd = t1.cd connect by prior t2.cd = t2.cd_p) sum_v
from t t1
start with t1.cd_p is null
connect by prior cd = cd_p
order by yr, cd
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #494959
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
кажется, есть одна мысль
сейчас поп робую
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #494965
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
а, нет. не взлетело
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #494971
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
пытаюсь взять через докручивание коррелированными подзапросами, но хуй
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #495029
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
Горбатый ёж  01.08.2023, 10:50
[игнорируется]
Что такое у тебя cd?
Номер по порядку в разрезе года?
коды. некоторые из которых могут быть родительскими для других кодов
насколько я понял, ты предлагаешь рассматривать год как элемент дерева
а я просто хочу построить разные ветви в разрезе годов, схлопнув суммы по узлам дерева с нижних веток, но вытащить их одним селектом
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #495032
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
заговнокожу хп, как вариант
который будет работать с выборкой по каждому году. суммировать, загружать в табличку, и так в цикле
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #495040
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
Горбатый ёж  01.08.2023, 11:01
[игнорируется]
ZаЛупина  01.08.2023, 10:59
[игнорируется]
заговнокожу хп, как вариант
который будет работать с выборкой по каждому году. суммировать, загружать в табличку, и так в цикле
Тоже вариант.
Но ты просто неправильно строишь дерево.
ну я понял, да. как только мешаются другие поля, и дублируются коды из дерева, начинается мешанина
но непонятно, почему через корр. подзапросы он не фильтрует , и порциями по-годово не подсовывает табличку под дерево
...
Рейтинг: 0 / 0
Просто Трёп / бНОПНЯ про орацле
    #495190
ZаЛупина
Скрыть профиль Поместить в игнор-лист
Участник
беZ трусиков!
ZаЛупина  01.08.2023, 10:59
[игнорируется]
заговнокожу хп, как вариант
реализовал
работает как часы! [:ok]
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы [новые:3] / Просто Трёп [закрыт для гостей] [новые:3] / бНОПНЯ про орацле, Поиск: Искать сообщения, созданные автором: ZаЛупина  
Читали тему (1): Анонимы (1)
Игнорируют тему (3): Королева Жезлов, erbol, папа акуз
Читали форум (12): Анонимы (9), IT-Клоп, sergey11, ElenaG
Пользователи онлайн (15): Анонимы (10), IT-Клоп, Bing Bot, sergey11, ElenaG, Буся 7 мин.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
x
x
Закрыть


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