#sql #teradata #create-table
Вопрос:
У меня возникла проблема с тем, как использовать SEL в Teradata. Проблема в том, чтобы спросить, что делает SEL(1/0)? Кроме того, у меня был такой фрагмент кода:
CREATE VOLATILE TABLE VT_ADDRESSES
, NO FALLBACK, NO BEFORE JOURNAL, NO AFTER JOURNAL AS
( SEL
1234 MEMBER_KEY
,'1234 MAIN STREET' STREET
,'DALLAS' CITY )
WITH DATA
PRIMARY INDEX ( MEMBER_KEY )
ON COMMIT PRESERVE ROWS;
INSERT INTO VT_ADDRESSES SEL 1237 MEMBER_KEY,'3413 CABRIOLET CT', 'RICHARDSON' CITY;
в этом случае, я полагаю, формат таблицы задан в соответствии с
'( SEL
1234 MEMBER_KEY
,'1234 MAIN STREET' STREET
,'DALLAS' CITY )'
Но я не уверен, может ли это привести к усечению более поздней вставленной информации
'INSERT INTO VT_ADDRESSES SEL 1237 MEMBER_KEY,'3413 CABRIOLET CT', 'RICHARDSON' CITY; '
строка «РИЧАРДСОН» длиннее, чем предыдущая «ДАЛЛАС» в части SEL.
Действительно нужна помощь в этом.
Комментарии:
1.
SEL 1/0
В вашем коде этого нет.2.
SEL
это просто сокращение отSELECT
(устаревший синтаксис).SEL(1/0)
просто возвращает ошибку деления на ноль . В вашей таблице создания типы данных основаны на литералах -> SMALLINT, VARCHAR(16) UNICODE, VARCHAR(6). Ваша 2-я вставка автоматически усечет строки, если она выполняется в сеансе Teradata, сеанс ANSI завершится неудачно. ВидетьSHOW TABLE VT_ADDRESSES
3. Вам нужно либо определить свою изменчивую таблицу перед загрузкой данных (и указать ширину столбца), либо, если вы хотите продолжать делать это так, как у вас есть, вам нужно привести свои литералы —
cast('DALLAS' as varchar(x)), ...