что такое правило «SEL» в SQL для создания таблиц и выборок, таких как SEL(1/0)?

#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)), ...