|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Тогда почему у меня (Oracle9i (9.2) под Win2k) не вываливается? Единственно, нужно после insert ... выдавать commit, иначе другие сессии отдыхают (если из SQL Plus, например). ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2002, 17:30 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
>Тогда почему у меня (Oracle9i (9.2) под Win2k) не >вываливается? Единственно, нужно после insert ... >выдавать commit, иначе другие сессии отдыхают (если из >SQL Plus, например). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
Это раз, а во-вторых в теле тригера нельзя делать коммит или роллбек. У меня, конечно, 8.1.7, но не думаю что это все так поменялось в 9-ке. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2002, 17:37 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Никто не говорит, что в теле триггера можно использовать commit или rollback. Но в 9.2 этот триггер работает !!! ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2002, 18:16 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Кстати, в Oracle8 (8.0.5) тоже работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2002, 18:26 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
>Кстати, в Oracle8 (8.0.5) тоже работает. 2Noname Приведите, пожалуйста, свой листинг. Я проверял на 8.0.5, 8.1.5 и 8.1.7 и везде одинаковый результат. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2002, 19:08 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Тоже решил посмотреть :-) 8.0.5 Linux insert into laud select * from dual ORA-04091: table LAUD is mutating, trigger/function may not see it Наверное Noname пошутил. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2002, 20:49 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Ей богу не шучу. Oracle 8.0.5 на WinNT 4 sp6. Привожу полный вывод SQL Plus (без всяких монтажей): SQL*Plus: Release 8.0.5.0.0 - Production on Wed Sep 11 9:6:17 2002 (c) Copyright 1998 Oracle Corporation. All rights reserved. Connected to: Oracle8 Release 8.0.5.0.0 - Production PL/SQL Release 8.0.5.0.0 - Production SQL> show user USER is "SCOTT" SQL> create table proba( 2 n1 number, 3 c1 varchar2(20)); Table created. SQL> create or replace trigger proba before insert on proba 2 for each row 3 begin 4 lock table proba in exclusive mode; 5 select decode(max(n1),null,0,max(n1))+1 into :new.n1 from proba; 6 end; 7 / Trigger created. SQL> insert into proba(c1) values('qqq'); 1 row created. SQL> select * from proba; N1 C1 --------- -------------------- 1 qqq SQL> ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 10:12 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
У меня тоже работает на 8.1.7 (Linux) Но это же не универсальный тригер, он не будет работать в запросе insert into mytable (поля_кроме_ID) (select поля from othertable) Так что без sequence необойтись ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 12:01 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Не будет. Но если не использовать вставки типа insert into table_name(...) select ..., то он имеет право на существование. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 12:33 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
в таком случае почти любой тригер имеет право на существование я, например, использую тригер который ищет дыры в таблице и заполняю их, он тоже обеспечивает уникальность и тоже не работет с insert into ... select ... все это частные случаи... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 12:44 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
А никто на общий случай не претендовал... Это один из способов обеспечения уникальности ключа в многопользовательской среде без использования SEQUENCE с известными ограничениями. Здесь тоже можно сделать поиск пробелов в ключе и прочие навороты. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 13:47 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
если задаться целью избавиться от sequence, то можно еще проще create or replace trigger my_trigger before insert on my_table for each row begin :new.id:=sys_guid; end; этод тригер удовлетворит и insert ... select ... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 14:10 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
или вообще отказаться от id и от тригеров в пользу использования ROWID, будет всего-то одно ограничение... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 14:15 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
2Noname >Ей богу не шучу. твой пример и у меня проходит,а ты попробуй insert into laud select * from dual; :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 15:06 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
select decode(max(n1),null,0,max(n1))+1 into :new.n1 from proba Takoj sposob ne spravedliv dlja mnogopolzovatelskogo dostupa. Esli v tablicu dobavljajut 2, a to i bolee sessij odnovremenno? To kakov budet rezultat? Pobedit tot kto pervim skazet commit, a svalitsja tot, kto opazdal. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2002, 23:07 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Народ, помогите плиз. Есть последовательность sequence, как результат этой последовательности занести в конкретный столбец. Т.к. пока мой триггер не работает: Create Trigger Dollar Before Insert On Валюта For Each Row Begin Select posledovat.Nextval INTO :new.ID_валюты From Валюта; END Dollar; / ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2002, 02:40 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
Заметил одну тенденцию этого форума: самые простые, пустяковые вопросы собирает больше всего постов. Касается этого треда и например "Работа с файлами..." Стыдно... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.11.2002, 11:06 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
В защиту create or replace trigger my_trigger before insert on my_table for each row begin if :new.my_autoencriment is null then select my_sequence.NEXTVAL from dual; end if; end; Случай для PK Иногда может возникнуть необходимость заполнения нескольких таблиц, связанных ключами, с помощью 1 скрипта/процедуры PL\SQL. Для того, чтобы связать дочерние и родительские записи, надо знать PK родителя. Если же в этом триггере убрать проверку на IS NULL, поле PK родителя будет изменено при вставке, и ничего не будет работать... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.11.2002, 17:38 |
|
Перечислители (SEQUENCE) в Oracle 8i...
|
|||
---|---|---|---|
#18+
To: Denis_M Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Выделена болдом ваша проблема. Используйте следующую конструкцию: Select posledovat.Nextval INTO :new.ID_валюты From Dual ; ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2002, 11:30 |
|
|
start [/forum/topic.php?fid=52&msg=32049516&tid=1992646]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
others: | 315ms |
total: | 433ms |
0 / 0 |