x FOR y в определении столбца инструкции создания таблицы DB2

Это оператор DB2 create table:

CREATE TABLE SCHEMA_F.TABLE_A (
    LEAFDESCRIPTION FOR F7UY2 CHAR(10) CCSID 1141  NOT NULL WITH DEFAULT
    ...

Что именно означает LEAFDESCRIPTION FOR F7UY2?


person Bernhard    schedule 08.02.2016    source источник


Ответы (1)


tl;dr

Это позволяет вам указать короткое имя, которое можно использовать в (старых) программах RPG на i и некоторых системных утилитах. В этом случае LeafDescription — это длинное имя, которое можно использовать в SQL, а F7UY2 — в RPG и т. д. (и SQL, но длинные имена обычно предпочтительнее по очевидным причинам).


Это часть специфичного для системы поведения, доступного на i.

Видите ли, i (iSeries, Systemi, AS/400) начиналась как совсем другая машина. Несколько десятилетий назад, еще до того, как SQL стал чем-то особенным. И в то время имена полей и таблиц были ограничены примерно 6 символами, и программы писались с учетом этого.

Теперь вернемся к тому, когда появится SQL. В i SQL DB2 был модифицирован (своего рода) поверх существующей файловой системы. Это означало, помимо прочего, что вы могли запрашивать существующие файлы с помощью SQL, без их повторного создания или повторного заполнения.
К сожалению, это также означало, что они застряли с исходными, полузашифрованными именами, отчасти потому, что у вас все еще были все исходные программы. Если вы создали (или пересоздали, в зависимости от обстоятельств) таблицу с помощью SQL, программы RPG не смогут ссылаться на нее. Таким образом, это позволяло вам указать имя, на которое оно могло ссылаться, а это означало, что вы могли переключаться на таблицы на основе SQL (у которых были некоторые дополнительные, новые преимущества) без необходимости изменять свои программы. Даже с учетом того, что в последних версиях RPG снято ограничение на длину имени, возможность не переименовывать все сразу является благом.

person Clockwork-Muse    schedule 08.02.2016
comment
Еще один момент, принято присваивать новым таблицам короткие имена. Даже если вы везде используете длинные имена. В противном случае система назначает один. LEAFDESCRIPTION будет иметь сгенерированное системой короткое имя LEAFD00001. - person Charles; 09.02.2016