Страница 1 из 1

Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 11:54
BlazeBio
У меня две таблицы:

Код: Выделить всё

//Группы форматов
Alter Dictionary ;
drop table ppgrformat;
create table D_USER.ppgrformat "Группы форматов"
with table_Code = 32500 with replace
with tableOptions header, journal
(
name : string "Наименование группы"
)
with index
(
ppgrformat01 = name
);

UPDATE x$files WHERE xf$code = 32500 SET xf$checksum = 0;

//Таблица связи ppkatstan и katmc
Alter Dictionary ;
drop table ppkatstanmc;
create table D_USER.ppkatstanmc "Таблица связи ppkatstan и katmc"
with table_Code = 32501 with replace
with tableOptions header, journal
(
cmc : ref(table katmc) "Ссылка на katmc.nrec МЦ"
)
with index
(
ppkatstanmc01 = cmc
);

UPDATE x$files WHERE xf$code = 32501 SET xf$checksum = 0
По отдельности эти таблицы создаются, а если вместе в одном файле компилить, то создаётся только первая при описании таблица.
Можно ли сделать так, чтобы сразу добавлялись несколько таблиц в БД при однократной компиляции?

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 12:07
Ged
зачем два раза
Alter Dictionary;

Код: Выделить всё

Alter Dictionary;

create table D_USER.ppgrformat "Группы форматов"
.....
create table D_USER.ppgrformat "Группы форматов"
.....

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 12:23
BlazeBio
Ged писал(а):зачем два раза
Alter Dictionary;
При убирании все равно создаётся первая таблица. А компилятор пишет ошибку:
"Ошибка: Общий размер всех сегментов индекса "PPGRFORMAT01" не должен превышать 255 байт."

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 12:31
edward_K
ну вы сами себе отвечате - на первой же у вас возникла ошибка. Табла создалась, а индекс ?
сделайте name:string[200]

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 12:35
Ged
Поэтому видимо и не работает.
Сделайте как Эд сказал или ограничьте Name
with index
(
ppgrformat01 = name(Length=200)
)

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 13:11
BlazeBio
Создал ещё несколько таблиц.

Код: Выделить всё

//Группы форматов
Alter Dictionary ;
drop table ppgrformat;
create table D_USER.ppgrformat "Группы форматов"
with table_Code = 32500 with replace
with tableOptions header, journal
(
name : string[50] "Наименование группы"
)
with index
(
ppgrformat01 = name
);

UPDATE x$files WHERE xf$code = 32500 SET xf$checksum = 0;

//Таблица связи ppkatstan и katmc
//Alter Dictionary ;
drop table ppkatstanmc;
create table D_USER.ppkatstanmc "Таблица связи ppkatstan и katmc"
with table_Code = 32501 with replace
with tableOptions header, journal
(
cmc : ref(table katmc) "Ссылка на katmc.nrec МЦ"
)
with index
(
ppkatstanmc01 = cmc
);

UPDATE x$files WHERE xf$code = 32501 SET xf$checksum = 0;

alter table ppkatstanmc
foreign key ppkatstanmc01
references katsopr
primary key KATSOPR01;

//Формальные МЦ
//Alter Dictionary ;
drop table ppkatstan;
create table D_USER.ppkatstan "Формальные МЦ"
with table_Code = 32502 with replace
with tableOptions header, journal
(
cmc : ref(table katmc) "Ссылка на katmc.nrec",
name : string[200] "Название МЦ",
isarch :word "Признак архива-1 / 0 - нет",
cppkatstanmc : ref(table ppkatstanmc) "Ссылка на ppkatstanmc.nrec",
cppgrformat : ref(table ppgrformat) "Ссылка на ppgrformat.nrec"
)
with index
(
ppkatstanmc01 = cmc,
ppkatstanmc02 =name+isarch,
ppkatstanmc03 =cppkatstanmc,
ppkatstanmc04 = cppgrformat
);

UPDATE x$files WHERE xf$code = 32502 SET xf$checksum = 0;

alter table ppkatstan
foreign key ppkatstanmc01
references katmc
primary key KATMC01;

alter table ppkatstan
foreign key ppkatstanmc03
references ppkatstanmc
primary key ppkatstanmcid;


alter table ppkatstan
foreign key ppkatstanmc04
references ppgrformat
primary key ppgrformatid;

//Статусы
//Alter Dictionary;
drop table ppstatus;
create table D_USER.ppstatus "Статусы"
with table_Code = 32503 with replace
with tableOptions header, journal
(
name : string[50] "Наименование статуса",
cppstatus : ref(table ppstatus) "Ссылка на ppstatus.nrec до",
cppstatus2 : ref(table ppstatus) "Ссылка на ppstatus.nrec после"
)
with index
(
ppstatus01 = name,
ppstatus02 =cppstatus,
ppstatus03 =cppstatus2
);

UPDATE x$files WHERE xf$code = 32503 SET xf$checksum = 0;

alter table ppstatus
foreign key ppstatus02
references ppstatus
primary key ppstatusid;

alter table ppstatus
foreign key ppstatus03
references ppstatus
primary key ppstatusid;

//Линии
//Alter Dictionary ;
drop table ppline;
create table D_USER.ppline "Линии"
with table_Code = 32504 with replace
with tableOptions header, journal
(
name : string[200] "Наименование линии",
cpodr : ref(table katpodr) "Ссылка на katpodr.nrec"
)
with index
(
ppline01 = name,
ppline02 =cpodr
);

UPDATE x$files WHERE xf$code = 32504 SET xf$checksum = 0;

alter table ppline
foreign key ppline02
references katpodr
primary key KATPODR01;


//Шапка плана
//Alter Dictionary ;
drop table pptitle;
create table D_USER.pptitle "Шапка плана"
with table_Code = 32505 with replace
with tableOptions header, journal
(
cpodr : ref(table katpodr) "Ссылка на katpodr.nrec",
pdate : date "Дата создания плана",
pbdate: date "Начальная дата",
pedate: date "Конечная дата",
cppstatus: ref(table ppstatus) "Ссылка на ppstatus.nrec",
cppline: ref(table ppline) "Ссылка на ppline.nrec",
cpptitle: ref(table pptitle) "Ссылка на pptitle.nrec"
)
with index
(
pptitle01 =cpodr,
pptitle02 =pdate,
pptitle03 =pbdate+pedate,
pptitle04 =cppstatus,
pptitle05 =cppline,
pptitle06 =cpptitle
);

UPDATE x$files WHERE xf$code = 32505 SET xf$checksum = 0;

alter table pptitle
foreign key pptitle01
references katpodr
primary key KATPODR01;

alter table pptitle
foreign key pptitle04
references ppstatus
primary key ppstatusid;

alter table pptitle
foreign key pptitle05
references ppline
primary key pplineid;

alter table pptitle
foreign key pptitle06
references pptitle
primary key pptitleid;

//Спецификация плана
//Alter Dictionary ;
//drop table ppspec;
create table D_USER.ppspec "Спецификация плана"
with table_Code = 32506 with replace
with tableOptions header, journal
(
cpptitle : ref(table pptitle) "Ссылка на pptitle.nrec",
npp: word "Номер плана",
cppkatstan: ref(table ppkatstan) "Ссылка на ppkatstan.nrec",
cotped:  ref(table katotped) "Ссылка на katotped.nrec",
percfs: double "Процент первого сорта,%",
tlost : double "Технические потери,%",
fdec: double "Первая декада",
sdec: double "Вторая декада",
tdec: double "Третья декада"
)
with index
(
ppspec01 =cpptitle,
ppspec02 =npp,
ppspec03 =cppkatstan,
ppspec04 =cotped,
ppspec05 =percfs+tlost,
ppspec06 =fdec+sdec+tdec
);

UPDATE x$files WHERE xf$code = 32506 SET xf$checksum = 0;

alter table ppspec
foreign key ppspec01
references pptitle
primary key pptitleid;

alter table ppspec
foreign key ppspec03
references ppkatstan
primary key ppkatstanid;

alter table ppspec
foreign key ppspec04
references katotped
primary key KATOTPED01;
При создании последней таблицы выдаётся ошибка:
"Ошибка: Ошибка при создании таблицы "PPSPEC". Код таблицы = 311 : "Ошибка выполнения [311]"." Что бы это могло значить?

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 13:33
edward_K
вы совпали по наименованию с SPMNPL
Добавте во все таблы признак что это ваши

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 13:45
BlazeBio
edward_K писал(а):вы совпали по наименованию с SPMNPL
Добавте во все таблы признак что это ваши
Изменил на "Спецификация производственного плана" все равно ошибка остаётся.

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 14:26
edward_K
тогда еще какой то ref - сделайте пока comp ( да и проще программировать будет)
а может перебрали число максимальных таблиц - измените номер на 28001
и проверте имя - ни с чем не совпадает?

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 14:50
BlazeBio
edward_K писал(а):тогда еще какой то ref - сделайте пока comp ( да и проще программировать будет)
а может перебрали число максимальных таблиц - измените номер на 28001
и проверте имя - ни с чем не совпадает?
Поменял ref на comp, номер на 28001, имя ни с чем не совпадает. Та же ошибка с кодом 311.

Код: Выделить всё

create table D_USER.ppspec "Спецификация производственного плана"
with table_Code = 28001 with replace
with tableOptions header, journal
(
//cpptitle : ref(table pptitle) "Ссылка на pptitle.nrec",
cpptitle(pptitle) : comp "Ссылка на pptitle.nrec",
npp: word "Номер плана",
//cppkatstan: ref(table ppkatstan) "Ссылка на ppkatstan.nrec",
cppkatstan(ppkatstan): comp "Ссылка на ppkatstan.nrec",
//cotped:  ref(table katotped) "Ссылка на katotped.nrec",
cotped(katotped):comp "Ссылка на katotped.nrec",
percfs: double "Процент первого сорта,%",
tlost : double "Технические потери,%",
fdec: double "Первая декада",
sdec: double "Вторая декада",
tdec: double "Третья декада"
)
with index
(
ppspec01 =cpptitle,
ppspec02 =npp,
ppspec03 =cppkatstan,
ppspec04 =cotped,
ppspec05 =percfs+tlost,
ppspec06 =fdec+sdec+tdec
);

UPDATE x$files WHERE xf$code = 28001 SET xf$checksum = 0;

alter table ppspec
foreign key ppspec01
references pptitle
primary key pptitleid;

alter table ppspec
foreign key ppspec03
references ppkatstan
primary key ppkatstanid;

alter table ppspec
foreign key ppspec04
references katotped
primary key KATOTPED01;

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 14:55
edward_K
cpptitle(pptitle) а вот это зачем? уберите пока это
еще следите что длина наименования поля не превысила 40, а само поле 10.

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 16:11
BlazeBio
edward_K писал(а):cpptitle(pptitle) а вот это зачем? уберите пока это
еще следите что длина наименования поля не превысила 40, а само поле 10.
Вы же говорили, что лучше делать через comp. Обратное возвращение на ref не исправляет ошибку.

Re: Вопрос по созданию таблиц

Добавлено: 08 июл 2010, 17:04
BlazeBio
Я не знаю почему так стало, но я изменил c ppspec на ppspecif, и таблица создалась. :-o Таблицы с именем ppspec раньше не было.

Re: Вопрос по созданию таблиц

Добавлено: 09 дек 2010, 12:40
beatlov
Это некорректная работа компилятора и в целом системы работы ПК Галактика с оракловыми таблицами.
Ошибка 311 - появляется при создании таблицы, когда таблица есть по факту в БД, но по каким-то причинам галактические идентификаторы таблицы в БД не прописались - то есть в суппорте вы ее не увидите, для галактики ее попросту нет.
Как лечить - нужно зайти в БД через обычный клиент и дропнуть таблицу оттуда обычным sql-скриптом.
Удачи!

Re: Вопрос по созданию таблиц

Добавлено: 03 окт 2012, 17:23
LaaLaa
UP-ну тему на всякий случай.

Люди постепенно начали переходить на Галактику 9.1 стали сталкиваться с конфликтом номеров таблиц добавленных ими в 8.1. Провел некоторое историческое расследование. Хочу публично озвучить что в Галактике есть официально зарезервированный диапазон куда программистам Галактики запрещено добавлять таблицы.

Для пользователей и партнеров зарезервирован диапазон кодов таблиц 31500 .. 31899

Инструментарий (Support и компилятор) не запрещает давать таблицам произвольные свободные номера. И это правильно т.к. инструментарием пользуются все программисты.

Чтобы не было дополнительных неудобств с конвертацией собственных таблиц при переходе на новые версии. Рекомендую пользователям создавать таблицы с номерами из этого диапазона.

PS: Информацию про официально закрепленный диапазон можно найти в ПИР 104.19971, 101.17051, 102.73712