GIZMO |
Отправлено: 13.01.2005, 10:46 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
Привет!
Есть IB6 + IBX5 + BCB5, а также две таблицы следующей структуры (упрощенно)
CODE |
CREATE TABLE "TABLE1"
(
"ID" INTEGER NOT NULL,
"NAME" CHAR(30) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("ID")
);
CREATE TABLE "TABLE2"
(
"NUM" INTEGER NOT NULL,
"ID" INTEGER NOT NULL,
"CODE" INTEGER NOT NULL,
"NAME" CHAR(30) CHARACTER SET WIN1251 COLLATE PXW_CYRL,
PRIMARY KEY ("NUM")
);
|
нужно вставлять в таблицу TABLE2 записи "в массовом порядке" (не по одной). Полям ID, NAME должны присваиваться значения по результатам выборки из TABLE1, NUM присваивается уникальное значение, а CODE — для каждой вставляемой группы записей свое (допустим для одной партии 1, для др. 2) и должно вводится "извне". Делаю:
CODE |
INSERT INTO TABLE2 (ID, NAME)
SELECT ID, NAME
FROM TABLE1
WHERE<...>;
|
с NUM, ID, NAME все понятно, а как быть с CODE?
|
|
AVC |
Отправлено: 13.01.2005, 12:49 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Чем определяется группа?
Вариант — вставлять Null и заполнять в триггере генератором. |
|
GIZMO |
Отправлено: 13.01.2005, 15:32 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (AVC @ 13/01/2005, 13:51) | Чем определяется группа?
Вариант — вставлять Null и заполнять в триггере генератором. |
Группа определяется WHERE.
Как передать в триггер значение напр. из Edit?
|
|
olegenty |
Отправлено: 13.01.2005, 15:45 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
не в триггер ты его будешь передавать, а поле заполнять при вставке, либо параметр передавать запросу на insert/хранимой процедуре
в триггере же всё просто, значение вставляемого поля = NEW.<имя поля>.
например, поле X можно заполнить так:
CODE |
IF (NEW.X IS NULL) THEN
NEW.X = GEN_ID(<ИМЯ ГЕНЕРАТРА>, <ШАГ, ПО УМОЛЧАНИЮ = 1>)
|
|
|
AVC |
Отправлено: 13.01.2005, 15:46 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Если у вас группа определяется Where, то значит все добавляемые строки принадлежат одной группе и, значит, можно писать так
INSERT INTO TABLE2 (ID, NAME, code)
SELECT ID, NAME, номер_группы
FROM TABLE1
WHERE<...>;
QUOTE |
Как передать в триггер значение напр. из Edit?
|
Естественным способом никак. Но можно найти обходные пути. |
|
GIZMO |
Отправлено: 14.01.2005, 10:46 |
|
Машинист паровоза
Группа: Участник
Сообщений: 174
|
QUOTE (AVC @ 13/01/2005, 16:48) | Если у вас группа определяется Where, то значит все добавляемые строки принадлежат одной группе и, значит, можно писать так
INSERT INTO TABLE2 (ID, NAME, code)
SELECT ID, NAME, номер_группы
FROM TABLE1
WHERE<...>;
|
Все с ручника снял!
Почему-то решил, что праметр в INSERT+SELECT передать нельзя.
Я с БД только неделю назад начал работать так, что возможно еще какое-то время глупые вопросы будут от меня поступать. Извиняюсь...
|
|
avc* |
Отправлено: 14.01.2005, 11:36 |
|
Не зарегистрирован
|
Ничего. Со всеми бывает. |
|