Вызов PLPCALL с параметрами
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Сб Фев 20, 2010 18:08  Вызов PLPCALL с параметрами |
|
Полезность: Нет оценки
|
Товарисчи!...
Есть некое желание вызвать Экранную форму операции через PLPCALL с предустановленными параметрами.. Попросту говоря, что бы эта форма при вызове была не пуста....
Как не старался, при передаче параметров вызов просто проскакивает, и ничего не происходит.. примерно это выглядело вот так:
Код: | stdio.put_line_buf('<%PLPCALL %THIS%.[NEW#AUTO](%PARAM%.P_NAME=>'''||P_PRC_EXP.[NAME]||''',%PARAM%.P_COD=>'''||P_PRC_EXP.[COD]||''',%PARAM%.P_VALUTA=>'''||P_PRC_EXP.[VALUTA]||''',%PARAM%.P_LIST_SCH_PRC=>'''||P_PRC_EXP.[LIST_SCH_PRC]||''',%PARAM%.P_DATE_CREATE=>'''||P_PRC_EXP.[DATE_CREATE]||''',%PARAM%.P_DATE_USE_BEG=>'''||P_PRC_EXP.[DATE_CREATE]||''',%PARAM%.P_GROUP_CODE=>'''||P_PRC_EXP.[GROUP_CODE]||''')%>');
|
в случае же, если параметры опустить, все замечательно вызывается:
Код: |
stdio.put_line_buf('<%PLPCALL %THIS%.[NEW#AUTO]('')%>');
|
... и экранная форма не заставляет себя долго ждать. но она - пустая.
По сути проблему я обошел, попросту обошелся без PLPCALL'а... однако хотелось бы понять, почему тут не сработало, и что я делаю не так, если, конечно, делаю... В чем могут быть подводные камни?
Жду комментариев. Заранее благодарен. _________________ Всего должно быть в меру. |
|
 |
kit83rd Участник со стажем
Вступление в Клуб: 05.02.2010
|
Вс Фев 21, 2010 04:18   |
|
Полезность: Нет оценки
|
В вызываемой операции присвоение значений параметрам происходит в блоке
p_message = 'VALIDATE'
p_info = '%PLPCALL%' |
|
 |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Вс Фев 21, 2010 18:22   |
|
Полезность: Нет оценки
|
kit83rd пишет: | В вызываемой операции присвоение значений параметрам происходит в блоке
p_message = 'VALIDATE'
p_info = '%PLPCALL%' |
это понятно...
но при вызове с параметрами, которые безусловно присвоятся, экранная то форма так и не видна... мне не сложно передать параметры через PLPCALL, но мне необходимо их изменить в процессе передачи посредством вызванной экранной формы. _________________ Всего должно быть в меру. |
|
 |
r00st Эксперт
Вступление в Клуб: 14.09.2007
|
Вс Фев 21, 2010 18:51   |
|
Полезность: Нет оценки
|
Стоит попробовать для начала передать все параметры, как null, чтобы убедиться, что проблема не в синтаксисе. А далее по одному параметру заполнять нужными значениями и смотреть, где отвалится.
Смущает то, что даты передаются в ковычках без какого-либо преобразования. |
|
 |
kit83rd Участник со стажем
Вступление в Клуб: 05.02.2010
|
Ср Фев 24, 2010 03:30   |
|
Полезность: Нет оценки
|
Формат для констант типа дата/время: YYYY/MM/DD HH24:MI:SS.
т.е.
%PARAM%.P_DATE_CREATE=>'''||to_char(P_PRC_EXP.[DATE_CREATE],'YYYY/MM/DD')||''' |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Ср Фев 24, 2010 12:50   |
|
Полезность: Нет оценки
|
kit83rd пишет: | Формат для констант типа дата/время: YYYY/MM/DD HH24:MI:SS.
т.е.
%PARAM%.P_DATE_CREATE=>'''||to_char(P_PRC_EXP.[DATE_CREATE],'YYYY/MM/DD')||''' |
Приведу кусок успешно работающего дистрибутивного кода:
Код: | stdio.put_line_buf('<% PLPCALL %THIS%.[CANC_TERM](P_DATE => '''||P_DATE_CLOSE||''')%>'); |
Передача даты происходит без всяких проблем. |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Ср Фев 24, 2010 12:54  Re: Вызов PLPCALL с параметрами. |
|
Полезность: Нет оценки
|
zh пишет: | Как не старался, при передаче параметров вызов просто проскакивает, и ничего не происходит.. примерно это выглядело вот так:
Код: | stdio.put_line_buf('<%PLPCALL %THIS%.[NEW#AUTO](%PARAM%.P_NAME=>'''||P_PRC_EXP.[NAME]||''',%PARAM%.P_COD=>'''||P_PRC_EXP.[COD]||''',%PARAM%.P_VALUTA=>'''||P_PRC_EXP.[VALUTA]||''',%PARAM%.P_LIST_SCH_PRC=>'''||P_PRC_EXP.[LIST_SCH_PRC]||''',%PARAM%.P_DATE_CREATE=>'''||P_PRC_EXP.[DATE_CREATE]||''',%PARAM%.P_DATE_USE_BEG=>'''||P_PRC_EXP.[DATE_CREATE]||''',%PARAM%.P_GROUP_CODE=>'''||P_PRC_EXP.[GROUP_CODE]||''')%>');
|
| А наименование тоже не передается? Ошибка разбора команды не выскакивает? Попробуйте оставить передачу только одного параметра. Что получается? |
|
 |
kit83rd Участник со стажем
Вступление в Клуб: 05.02.2010
|
Чт Фев 25, 2010 02:53   |
|
Полезность: Нет оценки
|
timochev пишет: |
Приведу кусок успешно работающего дистрибутивного кода:
Код: | stdio.put_line_buf('<% PLPCALL %THIS%.[CANC_TERM](P_DATE => '''||P_DATE_CLOSE||''')%>'); |
Передача даты происходит без всяких проблем. |
Этот кусок кода может сработать, а может и нет. Срабатывает неявное преобразование типа date -> char. Все зависит от оракловой настройки в каком виде представлять дату по умолчанию. Поэтому уж лучше самому написать to_char. |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Чт Фев 25, 2010 09:11   |
|
Полезность: Нет оценки
|
kit83rd пишет: | timochev пишет: |
Приведу кусок успешно работающего дистрибутивного кода:
Код: | stdio.put_line_buf('<% PLPCALL %THIS%.[CANC_TERM](P_DATE => '''||P_DATE_CLOSE||''')%>'); |
Передача даты происходит без всяких проблем. |
Этот кусок кода может сработать, а может и нет. Срабатывает неявное преобразование типа date -> char. Все зависит от оракловой настройки в каком виде представлять дату по умолчанию. Поэтому уж лучше самому написать to_char. |
Отчасти соглашусь с Вами.
Поставил несколько опытов:
1. Посмотрел, что передается в PLPCALL в вышеописанной реализации
Код: | <% PLPCALL %THIS%.[CANC_TERM](P_DATE => '2010-02-22 08:41:53')%> |
2. Модифицировал код по Вашему варианту. Получилось:
Код: | <% PLPCALL %THIS%.[CANC_TERM](P_DATE => '2010/02/22')%> |
Параметр передался в обоих случаях.
ИМХО, лучше не переопределять формат преобразования. Ведь последовательно происходит 2 преобразования: DATE -> CHAR, CHAR -> DATE. Если указывать формат в первом преобразовании, то правильнее указывать и во втором. А где это можно сделать? А вот при отсутствии формата и там, и там будет использоваться неявное преобразование, но оно зависит от одной оракловой настройки, что дает право надеяться на успех прямого и обратного преобразований. Сразу скажу, что не понимаю, почему отработали оба варианта.
Цитата из документации к PLPCALL:
Цитата: | Для представления значений типа "Число", "Дата" – применяются заранее определенные фиксированные форматы представления значений.
Формат для констант типа число: разделитель десятичной части ".", не допускается использование разделители тысяч.
Формат для констант типа дата/время: YYYY/MM/DD HH24:MI:SS.
Для логических констант, значения ‘TRUE’/’FALSE’/’NULL’
| Получается, что умолчательноу меня подставляется формат не соответствующий документации.
По дистрибутивному коду не нашел ни одного случая передачи даты с явным преобразованием. |
|
 |
kit83rd Участник со стажем
Вступление в Клуб: 05.02.2010
|
Пт Фев 26, 2010 02:44   |
|
Полезность: Нет оценки
|
timochev пишет: |
1.
Код: | <% PLPCALL %THIS%.[CANC_TERM](P_DATE => '2010-02-22 08:41:53')%> |
2.
Код: | <% PLPCALL %THIS%.[CANC_TERM](P_DATE => '2010/02/22')%> |
Параметр передался в обоих случаях.
|
Параметр передался в обоих случаях потому что формат YYYY/MM/DD не нарушен. Разделитель не очень важен.
А вот если поменять порядок, то Навигатор не разберет команду.
ИМХО. Второе преобразование char->date происходит именно по формату YYYY/MM/DD. Поэтому он так важен. |
|
 |
timochev Эксперт
Вступление в Клуб: 02.07.2007
|
Пт Фев 26, 2010 09:45   |
|
Полезность: Нет оценки
|
kit83rd пишет: | Параметр передался в обоих случаях потому что формат YYYY/MM/DD не нарушен. Разделитель не очень важен. | Да, действительно. Поигрался с to_date и убедился в этом.
И все-таки каково Ваше мнение насчет необходимости преобразования по формату? Вы придерживаетесь необходимости преобразования to_char с явно указанным форматом?
Мое мнение - 50/50. И там, и там свои плюсы и минусы. Это скорее ядерщики из ЦФТ должны установить стандарт (которого сейчас нету ).
СЗОТ А куда собственно автор темы исчез?  |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|