|
Странности с подстановкой переменных в SPL
|
|||
---|---|---|---|
#18+
Столкнулся со странной проблемой. Есть процедура, содержащая такие строки Код: plsql 1. 2. 3. 4. 5. 6.
На версии 9.40.FC7 работает на ура, а вот на версии 11.70.FC4 выдает синтаксическую ошибку. Региональные настройки идентичны. Побеждается насильственным приведением переменной к классу datetime внутри SELECT. Код: plsql 1.
В чем может быть засада? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 10:38 |
|
Странности с подстановкой переменных в SPL
|
|||
---|---|---|---|
#18+
Проверил : IBM Informix Dynamic Server Version 11.70.FC7 create procedure t1 () DEFINE f_session_date DATETIME YEAR to SECOND; select current into f_session_date from systables where tabid = 100; CREATE TEMP TABLE rpt_juv_temp (session_date DATETIME YEAR to SECOND, sf_code CHAR(2)); insert into rpt_juv_temp select f_session_date, 'AA' from systables where tabid = 100; end procedure Routine created. call t1(); Routine executed. ------------- Короче, был баг, его исправили. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2013, 22:08 |
|
Странности с подстановкой переменных в SPL
|
|||
---|---|---|---|
#18+
Добрый день. скажите, пожалуйста, похожая ситуация. есть проект на 9.40 в перспективе переход на 11.50 большое количество процедур использует конструкцию без явного приведения типа, быть может возможно без внесения изменений в тексты обойтись. возможно это тоже баг и уже исправленный:) CREATE TABLE test( evening_time DATETIME HOUR to MINUTE); insert into test (evening_time) values (current); SELECT DBINFO("version", "full") , TRIM(NVL(dt.evening_time, TO_DATE('00:00', '%H:%M')) || ''), TRIM(NVL(dt.evening_time, TO_DATE('00:00', '%H:%M') || '')), TRIM(NVL(dt.evening_time, EXTEND('00:00', HOUR TO MINUTE)) || '') FROM test dt; (constant) (expression) (expression)_1 (expression)_2 IBM Informix Dynamic Server Version 11.50.FC9 2013-09-20 08:24:00.00000 08:24 08:24 (constant) (expression) (expression)_1 (expression)_2 IBM Informix Dynamic Server Version 9.40.FC3 08:25 08:25 08:25 -- Эта выборка на 9.41 возвращает часы, а на 11.50 дату с часами, -- в связи с этим не работают процедуры на 11.50. Спасибо, Кожина Л. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2013, 08:39 |
|
Странности с подстановкой переменных в SPL
|
|||
---|---|---|---|
#18+
Kozhina Lidia, В версии 11.70 FC7: (constant) IBM Informix Dynamic Server Version 11.70.FC7 (expression) 2013-09-20 16:47:00.00000 (expression) 16:47 (expression) 16:47 так что это не исправлено (вероятно, считают, что незачем) Похоже, все дело в использовании обертки NVL, что приводит к преобразованию типа. Первый вызов NVL - с параметрами (DATETIME HOUR TO MINUTE, DATETIME) возвращает DATETIME. Вероятно, на этапе трансляции запроса строка формата не разбирается, поэтому тип результата TO_DATE точно не известен и берется по максимуму. Второй вызов NVL - с параметрами (DATETIME HOUR TO MINUTE, DATETIME || CHAR) преобразуется в (DATETIME HOUR TO MINUTE, CHAR). Что возвращает - DATETIME HOUR TO MINUTE или строку - не знаю. Впрочем, в нашем случае это все равно В третьем NVL используется EXTEND, которая не является функцией в строгом смысле слова - это просто конструкция языка. Так что NVL вызывается с параметрами (DATETIME HOUR TO MINUTE, DATETIME HOUR TO MINUTE) Кстати, к слову: не используйте NVL там, где это не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.09.2013, 17:02 |
|
Странности с подстановкой переменных в SPL
|
|||
---|---|---|---|
#18+
Leonid Belov, Леонид, благодарю, рада Вас слышать. Кожина. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2013, 10:53 |
|
Странности с подстановкой переменных в SPL
|
|||
---|---|---|---|
#18+
rjhdbyСтолкнулся со странной проблемой. Есть процедура, содержащая такие строки Код: plsql 1. 2. 3. 4. 5. 6.
На версии 9.40.FC7 работает на ура, а вот на версии 11.70.FC4 выдает синтаксическую ошибку. Региональные настройки идентичны. Побеждается насильственным приведением переменной к классу datetime внутри SELECT. Код: plsql 1.
Засада может быть в том, что в версии IDS 11.x и выше, более жесткая процедура проверки типов и нет неявного преобразования типов как это было раньше в более старых версиях. Насколько Я помню, все началось с появлением технологии Datablade в сервере Informix. PS: Нужно применять явное преобразование типов данных ... :) С уважением, Вадим. В чем может быть засада? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2013, 21:04 |
|
|
start [/forum/topic.php?fid=44&msg=38411218&tid=1607017]: |
0ms |
get settings: |
25ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
197ms |
get tp. blocked users: |
2ms |
others: | 316ms |
total: | 605ms |
0 / 0 |