|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
Есть в базе последовательность и триггер ее использующий. На вкладке Script из готового тригера и последовательности я скопировала Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
Lookup Error - DB2 Database Error: ERROR [42601] [IBM][DB2/NT64] SQL0104N An unexpected token "ROW" was found following "W AS NEW FOR EACH". Expected tokens may include: "END-OF-STATEMENT". но не пойму ... где при создании тригера идет упоминание использования последовательности ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 14:39 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
Вы базу с MS SQL на DB2 переносите? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 14:52 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
GuzyaВы базу с MS SQL на DB2 переносите? нет - просто хочу сделать поле id автоинкрементным. Чтобы при вставке данных в таблицу поле id принимало значение из сиквенса ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 15:47 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
Это делается изменением типа столбца. Т.е. alter table db.My_table alter column ... Если db2 до 10 версии, то можно ч\з центр управления, правой кнопкой по таблице -> редактировать ->... Какая версия db2 и какая ОС? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:46 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
Ольга Семенова, CREATE OR REPLACE TRIGGER db.My_Trigger NO CASCADE BEFORE INSERT ON db.My_table REFERENCING NEW AS NEW FOR EACH ROW -- declare (if needed) BEGIN IF :NEW.ID IS NULL THEN SELECT My_SEQ.Nextval INTO :NEW.ID FROM dual; END IF; END; / ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:53 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
p.s. можно и безусловно присваивать значение полю ID ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 16:54 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
maxkmn, лучше, конечно, так (если совместимость с оракл не включена) vi crt.db2 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
db2 -td@ -vf crt.db2 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 17:15 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
всем спасибо!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 17:40 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
maxkmn Код: plsql 1. 2. 3. 4. 5. 6. 7. 8.
Код: sql 1. 2. 3.
будет значительно правильней. Посмотрите, чем отличается Inlined Compound SQL от Compiled: Compound SQL (inlined) statement Compound SQL (compiled) statement В частности note к описанию Compound SQL (compiled) statement: Код: plaintext 1. 2.
Они отличаются не только поведением с точки зрения транзакционности (атомарности), но и механизмами реализации. Inlined интегрируется в "родительский" SQL statement и выполняется SQL движком в рамках единого execution plan. Compiled выполняется в некой Procedure Virtual Machine (PVM) - отдельный движок, интегрированный в СУБД для выполнения процедурного кода (SQL PL). Соответственно Inlined Compound SQL имеет массу ограничений по сравнению с Compiled, но на порядки быстрее. Не говоря уж про то, что помимо собственно выполнения кода будут значительные накладные расходы на вызов PVM. Стоит также отметить, что при массированной вставке (массовая загрузка или нагруженное OLTP приложение) Compiled триггер, да ещё ON EACH ROW станет просто кошмаром. BTW Автоинкремент, конечно, проще сделать так: Код: sql 1. 2. 3.
Можно ещё задать START WITH ..., INCREMENT BY ..., MIN/MAX values, CYCLE/NO CYCLE, размер кэша сгенерированных значений (чтобы лишний раз значение счётчика на диск не сбрасывать при высокой нагрузке). "Внутри" оно, конечно, имплементировано через "сиситемные" sequences. PS Лично я за использование GENERATE_UNIQUE() для суррогатных ключей, уж если они нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 19:26 |
|
создание тригера на вставку с автоинкрементов
|
|||
---|---|---|---|
#18+
PPS Историческая справка. Non-atomic (compiled) триггеры и функции появились, дай бог памяти, в 9.7 как фича (расширило спектр возможных операций внутри триггеров/ф-й), но из-за недостаточного освещения аспекта реализации и производительности стало возможным делать такие вот "ошибки". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2019, 19:47 |
|
|
start [/forum/topic.php?fid=43&fpage=5&tid=1600245]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
others: | 9ms |
total: | 118ms |
0 / 0 |