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

Как корректно добавить новую таблицу?

Добавлено: 15 мар 2007, 08:36
Alexander
Нужно в Оракл добавить новую таблицу, чтобы она была видна vip-ом... Добавил SQL скриптом, пишет, что не может открыть таблицу....
Как бороться?

Добавлено: 15 мар 2007, 09:11
Alexander
при опытке вставить випом пишет "ошибка 46, не могу вставить"...

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

create table TestTable "TestTable"
With Replace
(
  NumRef     :  longint       "F1",
  Memo       :  lvar          "F2"
)
with index
(
   TestTable00 = NumRef(Unique)
);

Добавлено: 15 мар 2007, 09:55
edward_K
1. Никогда не делайте изменения внешними средствами - только vip( через сапорт тоже не катит - тока с командной строки).
2. Смотрите например конвертор 585-800 AltCrea.lot
3. первой строкой
Alter Dictionary ;
#include DICTYPES.DEF // возьмите с того конвертора

далее (разумеется со своими поправками, я занимаю номера 28400, кто-то на 30000)
Create Table D_EXTCL.ATTRVAL "Значения внешних атрибутов"
Using "AttrVal.dat"
With Table_Code = 1006
With Replace
(
NREC : comp "NREC",
LASTUSER : string[20] "LASTUSER",
LASTTIME : time "LASTTIME",
LASTDATE : date "LASTDATE",
FILIALNO : longint "FILIALNO",
WTABLE : word "Внутренний тип объекта",
CREC : comp "Код записи в таблице-объекте БД",
CATTRNAM : comp "Код названия аттрибута,ссылка на AttrNam",
VSTRING : string[120] "string-значение атрибута",
VDOUBLE : double "double-значение атрибута",
VDATE : date "date-значение атрибута",
VTIME : time "time-значение атрибута",
VCOMP : comp "comp-значение атрибута",
VLVAR : LVar "memo-значение атрибута"
)
With Index
(
ATTRVAL0 = NREC(Unique,Surrogate,Journal),
ATTRVAL2 = CATTRNAM,
ATTRVAL3 = WTABLE(Unique) + CREC(Unique) + CATTRNAM(Unique) + VSTRING(Unique,length=40),
ATTRVAL4 = WTABLE(Unique) + CREC(Unique) + CATTRNAM(Unique) + VDOUBLE(Unique),
ATTRVAL5 = WTABLE(Unique) + CREC(Unique) + CATTRNAM(Unique) + VDATE(Unique),
ATTRVAL6 = WTABLE(Unique) + CREC(Unique) + CATTRNAM(Unique) + VCOMP(Unique)
);
отдельным лотом выполнить
// для обнуления контрольной суммы
UPDATE X$FILES WHERE XF$CODE = 0 SET XF$CHECKSUM = 0;
иначе галка будет ругаться при входе.
тренируйтесь сначала только на тесте
прежде чем что-то делать запишите контрольную сумму - chk_ora не пойдет работать, пока вы ее на место не поставите. Это кстати учтите и при проведении конверторов. Часть из них требуют подсовывания нового словаря из образца - потом его нужно будет тоже изменять.

Добавлено: 15 мар 2007, 10:22
Alexander
Почему контрольную сумму нужно сохранять, а потом назад перезаписывать? Разве она не должна пересчитываться? Расскажите, плз, по подробнее про контрольную сумму и как она(с ней) работать. :?:

Добавлено: 15 мар 2007, 11:01
edward_K
увидите в процессе :D
пока просто запишите ее значение. На то она и контрольная, что проверяется при запуске процессов, при этом для каких то хватит 0 чтобы запуститься, а каким то нужно значение соответсвующее версии( а оно у вас измениться). И вообще - поищите на форуме про добавление своих таблиц.

Добавлено: 16 мар 2007, 09:32
Goblin
DictTypes.Def в принципе можно и не подключать - там только макроопределения основных непримитивных типов и обойтись можно без него.
А насчет кода таблиц - тут сложнее .
Диапазон таблиц для пользователей был раньше выделен с 31500 по 31999 (до Атлантиса 3.03.19 включительно, дальше - не в курсе, не долши мы до них).

Добавлено: 22 мар 2007, 10:20
Alexander
можно ли установить TABLESPACE для создаваемой таблицы??
сделать каскадное удаление?
как добавлять триггеры: SQL, или опять как-то випом??

Добавлено: 22 мар 2007, 11:29
oiko
установить TABLESPACE можно.
удаляйте випом как и создавали
триггеры при помощи скл вип триггеры делать не умеет.

Добавлено: 22 мар 2007, 11:41
Alexander
oiko
установить TABLESPACE можно.
как его установить?? Пример создания можно? Вы со схемой не перепутали??
удаляйте випом как и создавали
вы меня не поняли, Пример SQL:

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

ALTER TABLE SomeSheme.SomeTable1 ADD (
  CONSTRAINT SomeName 
  FOREIGN KEY (SomeKey) 
  REFERENCES SomeSheme.SomeTable2(SomeKey1), 
    [b]ON DELETE CASCADE[/b]);
При удалении записи из родительской таблицы все дочерние тоже атоматом удаляются.
триггеры при помощи скл вип триггеры делать не умеет.
Последовательности тоже(Create Sequence)?

Добавлено: 22 мар 2007, 15:02
oiko
Нет схема одна иначе Галка этих таблиц не увидит. Создаете отдельное табличное пространство со своими файлами. Убиваете в старом таблицу создаете в новом и вкачиваете данные.

Удаляйте данные в самой Галактике - по идее тогда сама программа удалит ссылки в других таблицах. Если вы сами хотите такие ключи писать можете напоротся когда Галка захочет удалить запись в таблице а СУБД уже постаралось и удалило и Галка до конца транзакцию не доведет.

А также процедуры, функции и т.д.

Добавлено: 22 мар 2007, 15:32
Alexander
делаю випом с командной. таблицы добавил нормально!

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

alter table Table1
   foreign key K01
   references Table2
   primary key k01
   restrict
;
Результат: "Не могу блокировать базу данных для модификации структуры таблицы Table1" код[94]
Это почему??? :???:

Добавлено: 22 мар 2007, 15:37
oiko
Это тебе так Галка ругается?

Добавлено: 23 мар 2007, 08:01
Alexander
да

Добавлено: 23 мар 2007, 09:58
Alexander
разобрался... надо было разогнать всех... странно, почему нужен монопольный доступ для создания связей...

Добавлено: 05 апр 2007, 14:21
Alexander
Таблицы добавились, НО! править их можно только с правами админа. Как давать права? SQL grand делать, или как-то средствами саппорта....