Как значения по умолчанию CURRVAL и NEXTVAL генерируют «ORA-0094: столбец здесь не разрешен» в Oracle 11 - PullRequest
0 голосов
/ 27 февраля 2020

Я использую учебник для Oracle 12 c, но курс хотел, чтобы мы загрузили Oracle 11, так что мне интересно, в этом ли проблема? Это из учебника, в котором показана таблица TEST_DEFVAL, созданная при вводе:

insert into orders (order#, customer#, orderdate, shipdate, shipstreet, shipcity, shipstate, shipzip)
values (orders_order#_seq.NEXTVAL, 1010, '06-APR-09', NULL, '123 WEST MAIN', 'ATLANTA', 'GA', 30418);

select order#, customer#, orderdate, shipdate, shipstreet, shipcity, shipstate, shipzip
from orders
where customer# = 1010;

insert into orderitems (order#, item#, isbn, quantity, paideach)
values (orders_order#_seq.CURRVAL, 1, 8117949391, 1, 8.50);

select *
from orderitems
where order# = 1021;

create sequence test_defval_seq
    increment by 1
    start with 100
    nocache
    nocycle;

create table test_defval
    (col1 number default test_defval_seq.NEXTVAL, 
    col2 NUMBER);

1 Ответ

2 голосов
/ 27 февраля 2020

Точно, это 11g, который вызывает ошибку. Вы не можете использовать значение столбца по умолчанию, как это. Обходной путь должен создать триггер:

SQL> create table test_defval (col1 number, col2 number);

Table created.

SQL> create sequence test_defval_seq;

Sequence created.

SQL> create or replace trigger trg_bi_def
  2    before insert on test_defval
  3    for each row
  4  begin
  5    :new.col1 := test_defval_seq.nextval;
  6  end;
  7  /

Trigger created.

SQL> insert into test_defval (col2) values (100);

1 row created.

SQL> select * From test_defval;

      COL1       COL2
---------- ----------
         1        100

SQL>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...