如何在 Oracle 中使用序列
Posted
技术标签:
【中文标题】如何在 Oracle 中使用序列【英文标题】:How to use Sequences in Oracle 【发布时间】:2013-07-06 22:02:32 【问题描述】:我还是 SQL 的新手,并且处于学习阶段。我有一个家庭作业,我已经做了很长一段时间了,但我无法弄清楚我的错误来自序列中的哪个位置。我正在使用 Oracle SQL。
INSERT INTO ORDERS
VALUES (SEQ_ORDER_ID.NEXTVAL, '200', 'MOVIE FOR RENT', '30', '322.61', '15.36', 'CP', '10-MAR-13', '15-MAR-13');
INSERT INTO ORDERS
VALUES (SEQ_ORDER_ID.NEXTVAL, '200', 'MOVIE FOR RENT', '30', '419.74', '19.99', 'CP', '12-MAR-13', '17-MAR-13');
INSERT INTO ORDER_ITEMS
VALUES (SEQ_ITEM_ID.NEXTVAL, SEQ_ORDER_ID.CURRVAL, '40', '10', '25', '12.29', '307.25');
INSERT INTO ORDER_ITEMS
VALUES (SEQ_ITEM_ID.NEXTVAL, SEQ_ORDER_ID.CURRVAL, '40', '11', '25', '15.99', '399.75');
Order_id 和 Item_id 我想使用 NEXTVAL 和 CURRVAL 进行排序。我得到的错误是:
VALUES (SEQ_ITEM_ID.NEXTVAL, SEQ_ORDER_ID.CURRVAL, '40', '10', '25', '12.29', '307.25')
*
ERROR at line 2:
ORA-02289: sequence does not exist
VALUES (SEQ_ITEM_ID.NEXTVAL, SEQ_ORDER_ID.CURRVAL, '40', '11', '25', '15.99', '399.75')
*
ERROR at line 2:
ORA-02289: sequence does not exist
感谢您的帮助。
这里有更多信息......
create table orders(
order_id number(8),
Store_id number(4) not null,
description varchar2(30),
total_items number(3),
total_payment number(8,2),
tax number(6,2),
order_status varchar2(2),
ordering_date date,
order_completed_date date
);
create table order_items(
item_id number(10),
order_id number(8) not null,
distribution_id number(8) not null,
movie_id number(5) not null,
number_of_items number(3),
item_unit_price number(5,2),
item_sub_total number(10,2)
);
alter table orders
add constraint order_pk primary key (order_id);
alter table orders
add constraint store_order_fk foreign key (store_id) references movie_rental_stores(store_id);
alter table order_items
add constraint order_item_pk primary key (item_id);
alter table order_items
add constraint order_item_fk foreign key (order_id) references orders(order_id);
alter table order_items
add constraint movie_item_fk foreign key (movie_id) references movies(movie_id);
alter table order_items
add constraint distributor_order_item_fk foreign key (distribution_id) references distributed_movie_list(distribution_id);
DROP sequence seq_order_id;
CREATE sequence seq_order_id
increment BY 1 START WITH 1 minvalue 1;
DROP sequence seq_order_item_id;
CREATE sequence seq_order_item_id
increment BY 1 START WITH 1 minvalue 1;
【问题讨论】:
@William Peterson,您已经创建了seq_order_item_id
序列,但您正尝试在代码中使用seq_item_id
。
这个问题是关于发布代码中的错字
@APC,代码中的错字在哪里?我做错什么了?我还是不太明白。
【参考方案1】:
ORA-02289 是正确的。序列不存在。更仔细地查看您的代码。 您的 DDL 脚本会创建一个具有此名称的序列 ...
DROP sequence seq_order_item_id;
CREATE sequence seq_order_item_id
...但是您的代码引用了这个名称:
VALUES (SEQ_ITEM_ID.NEXTVAL
只需更改您的 INSERT 语句,使其引用正确的名称,代码就会运行。
【讨论】:
和@Horrendous_Space_Kablooie,谢谢...谢谢...谢谢...我终于明白你一直试图告诉我做什么。我的代码运行完美!【参考方案2】:是否在表排序的同一架构中创建了序列 SEQ_ITEM_ID?
是否已按 SEQ_ITEM_ID 创建了公共同义词?
【讨论】:
这些表在同一个模式中。我不明白“公共同义词”。所以,我不知道如何回答这个问题。 他没有问表是否在同一个模式中,而是表和序列对象是否在同一个模式中?我看不出它们会如何,否则您不会收到此错误。请显示您的创建语句。公共同义词是对所有模式都是全局的对象的别名。如果所有对象都在同一个架构中,则不需要这样做。以上是关于如何在 Oracle 中使用序列的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQLAlchemy 中查找列使用的 Oracle 序列的名称?