|
|
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
ПРИМЕР re_z.flg1 .... re_z.flg12 рассчитаные переменные и их значения определены В зависимости от даты надо вычислить сумму su_flg за mm месяцев for ii in 1..to_number(to_char(pdt,'mm')) loop pim := 're_z.flg'||to_char(ii); su_flg := su_flg + значение(pim); end loop; Как такое можно реализовать ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2003, 11:15 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
Примерно так, по псевдокоду: Код: plaintext 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2003, 11:25 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
>Примерно так, по псевдокоду: declare su_flg number := 0; su_flg2 number:= 0; pdt date := '25-02-2002'; RE_ZFL1 number :=5; RE_ZFL2 number :=10; begin for ii in 1..to_number(to_char(pdt,'mm')) loop su_flg2 := su_flg; execute immediate 'begin :su_flg := :su_flg2 + re_zfl'||to_char(ii)||'; end;' using out su_flg, su_flg2; end loop; dbms_output.put_line(su_flg); end; ORA-06550: line 1, column 29: PLS-00201: identifier 'RE_ZFL1' must be declared ORA-06550: line 1, column 7: PL/SQL: Statement ignored ORA-06512: at line 11 А так что-то не проходит. Не видит он RE_ZFL1 . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2003, 14:37 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
Потому что они объявлены в самом pl/sql блоке, и область видимости их этим самым блоком и заканчивается. А Native SQL выполняется, не знаю как точно это определяется, вне контекста pl/sql блока. Выход- объявить переменные где-нибудь, к примеру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2003, 15:04 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
>А Native SQL выполняется, не знаю как точно это определяется, вне >контекста pl/sql блока. Выход- объявить переменные где-нибудь, к примеру Все правильно так работает. Но ситуация немного другая - в процедуре открываем курсор с параметрами процедуры и получаем запись курсор%rowtype с полями (z1....z12 ....). Так как все же мне проще найти сумму z1+...zNN (где NN -цифра 1-12). Обьявить курсор%rowtype заранее в пакете я не могу . Может быть есть возможность обьявить переменную %ROWTYPE не привязанную к конкретной таблице или курсору, а затем передать ей значение конкретного курсор%rowtype. Заранее ВСЕМ благодарен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2003, 11:58 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
Поясни, если у тебя поля строко от 1-го до 12-ти, то зачем нужны макроподстановки? Может их просто сложить? Или набор и/или имена полей могут различаться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2003, 12:51 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
Денису! Пишется приложение где многое завязано на даты. Набор и/или имена полей могут меняться (если бы надо было разово, то проблемы не было - тупо бы написать если так то получим то-то, а хотелось бы иметь функцию или процедуру на вход которой подавалось бы неполное имя и цифра, а на выходе бы иметь результат (сумму,произведение...и др. )). И вообщем то все это делается как ты описал выше, но в случае с курсором я не могу обьявить переменную заранее (в пакете). А в процедуре значения всех переменных определенны. Может что-то коряво обьяснил - спрашивайте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2003, 13:36 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
А что, курсор состоит из одной записи- перечисление параметров? Возникла мысль использовать объектный тип-таблицу, заполнять ее значениями и отдавать дальше. Приведи пример одного-двух запросов, только не очень больших, достаточных для понимания сути задачи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2003, 13:57 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
Задача - табельный учет и расчет зарплаты - курсор состоит из одной записи(собираются данные из нескольких таблиц по одному работнику в разрезе месяцев ) Насчет примера запроса сложнее (вернее не знаю что он даст) он срабатывает правильно cursor cu_ud is select * from (select c.tn itn , sum(decode(to_number(to_char(a.dt,'MM')),1,a.summa*b.p15)) s1, sum(decode(to_number(to_char(a.dt,'MM')),2,a.summa*b.p15)) s2, ..... sum(decode(to_number(to_char(a.dt,'MM')),12,a.summa*b.p15)) s12, sum(a.summa*b.p14) sucp, sum(a.summa*b.p16) sump -- from zsna a, zsnu b, zsrab c -- where c.tn=a.tn and b.shifr=a.shifr and c.tn=ptn -- group by c.tn) , (select sum(decode(d.shifr,71,d.summa,0)) udcn from zsud d where d.tn=ptn) ; В зависимости от даты на входе процедуры надо получить сумму (S1...sNN),где NN - месяц даты, кроме того значения S1... используются в процедуре для расчета других переменных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2003, 14:23 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
ИМХО выяснять набор полей у курсора- неблагодарное занятие, особенно если эти поля заранее неизвесты. Я бы переписал запрос, делал не Код: plaintext 1. 2. а Код: plaintext 1. 2. 3. получилось бы одно поле, которое и просуммировал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2003, 15:19 |
|
||
|
Можно ли в ORACLE использовать макроподстановки
|
|||
|---|---|---|---|
|
#18+
Денис! Спасибо за идею.Обязательно попробую.Сам занимаюсь ORACLE недавно и хотелось бы разобраться что здесь можно ,что нельзя и понять сам принцип именно программирования. Ведь проблема то в чем ? проссумировать известные значения и такие сложности... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2003, 16:08 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32107759&tid=1991589]: |
0ms |
get settings: |
5ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
155ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 201ms |
| total: | 453ms |

| 0 / 0 |
