Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / PowerBuilder Новый топик    Ответить
 Как отключить проверку синтаксиса для DW  [new]
Заятс
Member

Откуда: Киев
Сообщений: 316
Собственно, сабж. Кто что может подсказать?
Опишу ситуацию для чего это потребовалось.
Select содержит вызов функции, аргумент которой имеет тип INTEGER. При вызове в функцию передаётся разница двух дат (dtpay - :p_dt0), где dtpay - поле таблицы типа DATE (Oracle), p_dt0 - параметр типа DateTime (PB). Реальные значения и dtpay и :p_dt0 компоненты времени не содержат, т.е. их разница - целое число. Т.е. запрос корректный, через утилиты Oracle выполняется без проблем, а при сохранении Sql в редакторе dw выдаётся ошибка: ORA-01007 - несоответствие типа фактического аргумента его описанию. И соответственно запрос не сохраняется.
Обошёл проблему редактированием запроса во внешнем редакторе и последующим импортом в PB. Но как-то это некрасиво, если потребуется менять запрос - опять только через внешний редактор.

И попутный вопрос, как собственно PB проверяет синтаксис. Собственно понятно, что запрос отправляется на выполнение со значениями по умолчанию, или только препарируется, но хотелось бы знать точнее.
3 сен 09, 16:41    [7614220]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить проверку синтаксиса для DW  [new]
Заятс
Member

Откуда: Киев
Сообщений: 316
Да, забыл указать: PB 9.0.3
3 сен 09, 16:43    [7614239]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить проверку синтаксиса для DW  [new]
ZhV
Member

Откуда: СПб
Сообщений: 252
Можно (или нужно) применить явное преобразование типа при задании параметра функции в SQL-select операторе
Select  a.datecolumn,
        my_func( Cast( (sysdate - a.datecolumn) as integer), a.column2)  f_result
FROM    my_table  a 
WHERE  (sysdate - a.datecolumn) > 3
3 сен 09, 19:20    [7615297]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить проверку синтаксиса для DW  [new]
spas2001
Member

Откуда: Тамбов--->Москва-->Тамбов-->Москва-->Тамбов
Сообщений: 2010
Это же Oracle - следовательно не cast, a to_date(...
Правильно советуют - менять тип внутри sql-выражения
-----------------------------------------------------------------------------
Главная деталь любой машины - голова ее владельца
3 сен 09, 23:19    [7615710]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить проверку синтаксиса для DW  [new]
Заятс
Member

Откуда: Киев
Сообщений: 316
ZhV,

Вот что получается при сохранении запроса в редакторе dw при использовании Cast:
SELECT func1(cast((t.dtpay - :p_ds) as integer)) FROM Table t
---------------------------
ORA-00932: inconsistent datatypes: expected NUMBER got INTERVAL
4 сен 09, 15:29    [7619104]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить проверку синтаксиса для DW  [new]
ZhV
Member

Откуда: СПб
Сообщений: 252
Скорее всего, входной параметр определен не как datetime, а как date - поэтому компилятор не может определить какой ему считать интервал.
Надо попробовать оба операнда из операции вычитания принудительно привести к режиму DateOnly - для этого есть отдельная функция

SELECT   func1(  To_Number (  Trunc(t.dtpay,'DD') - Trunc(:p_ds,'DD')  )   )  f_result 
FROM Table t
4 сен 09, 20:15    [7620646]     Ответить | Цитировать Сообщить модератору
 Re: Как отключить проверку синтаксиса для DW  [new]
AIS
Member

Откуда:
Сообщений: 1695
А может у Вас тоже. ;)
5 сен 09, 00:09    [7621182]     Ответить | Цитировать Сообщить модератору
Все форумы / PowerBuilder Ответить