2620: ошибка неверного символа в хранимой процедуре teradata - PullRequest
0 голосов
/ 15 мая 2018

Конкатенация работает в операторе выбора:

SELECT 'HELLO' || 'WORLD';

возвращает HELLOWORLD, но когда я пытаюсь использовать его в хранимой процедуре, как показано ниже:

SET Time_of_Day=TRIM(Hour_of_Day) || ' : ' || TRIM(Minute_of_Hour) || ' : ' || TRIM(Second_of_Minute);

где Hour_of_Day , Minute_of_Hour , Second_of_Minute - переменные, я также пробовал без TRIM:

ERROR

**CALL FAILED 2620:PROCEDURE_NAME:THE FORMAT OR DATA CONTAINS A BAD CHARACTER**

1 Ответ

0 голосов
/ 15 мая 2018

Приведение строки ко времени в Teradata требует двузначного часа / минуты / секунды:

SET Time_of_Day=TRIM(Hour_of_Day (FORMAT '99')) || ' : ' ||
                TRIM(Minute_of_Hour (FORMAT '99')) || ' : ' || 
                TRIM(Second_of_Minute (FORMAT '99'))

Но этот фрагмент, вероятно, из вопроса SP, который вы удалили час назад (за несколько секунд до того, как яможет опубликовать мой ответ).

Нет необходимости запускать 86400 однострочных вставок, просто создайте все данные в одном выборе, например:

SELECT
   Row_Number() Over (ORDER BY h,m,s),
   Extract(SECOND From t) AS s,
   Extract(MINUTE From t) AS m,
   Extract(HOUR From t) AS h,
   t
FROM
 (
   SELECT Cast(Begin(pd) AS TIME(0)) AS t
   FROM sys_calendar.CALENDAR
   WHERE calendar_date = Current_Date
   EXPAND ON PERIOD(Cast(Current_Date AS TIMESTAMP(0)), Cast(Current_Date + 1 AS TIMESTAMP(0))) AS pd
 ) AS dt
...