Oracle 包中的自动增量
Posted
技术标签:
【中文标题】Oracle 包中的自动增量【英文标题】:Auto increment in Oracle package 【发布时间】:2011-09-07 06:05:19 【问题描述】:我试图在我的包上使用自动增量而不使用触发器。有人可以解释我如何在我的包中使用它。我这样做并没有工作它抱怨的 abt 变量没有被声明或类型没有被分配。 . 我看到了其他自动增量问题,但没有人使用自动增量而不触发包
> PROCEDURE insertExample (
user_id_in IN sample.seq_user_id.nextval,
name_in IN sample.name%TYPE,
age_in IN sample.age%TYPE )
IS
BEGIN
INSERT INTO sample
(seq_user_id.nextval, name, age)
VALUES
(user_id_in, name_in, age_in);
END insertExample;
【问题讨论】:
【参考方案1】:我会将您的过程表述为 FUNCTION,并将新 ID 返回给调用者:
FUNCTION insert_user
(
name_in IN users.name%TYPE,
age_in IN users.age%TYPE
)
RETURN users.id%TYPE
IS
v_id users.id%TYPE;
BEGIN
INSERT INTO users (
user_id,
name,
age
) VALUES (
seq_user_id.nextval,
name_in,
age_in
)
RETURNING
user_id
INTO
v_id
;
RETURN v_id;
END insert_user;
这通常是一种更有用的插入模式,尤其是在您可能希望随后在其他表中插入子记录的情况下。
【讨论】:
【参考方案2】:您离可行的解决方案不远:
PROCEDURE insertExample (
name_in IN sample.name%TYPE,
age_in IN sample.age%TYPE )
IS
BEGIN
INSERT INTO sample (user_id, name, age)
VALUES (seq_user_id.nextval, name_in, age_in);
END insertExample;
我假设该表至少有三列,分别称为user_id
、name
和age
。此外,我假设您已经创建了一个名为 seq_user_id
的序列(CREATE SEQUENCE seq_user_id START WITH 1 INCREMENT BY 1)。
由于用户ID不是自动分配的,它不再是参数列表的一部分。
【讨论】:
【参考方案3】:你想要类似的东西
PROCEDURE insertExample (
name_in IN sample.name%TYPE,
age_in IN sample.age%TYPE )
IS
BEGIN
INSERT INTO sample
(user_id, name, age)
VALUES
(seq_user_id.nextval, name_in, age_in);
END insertExample;
【讨论】:
【参考方案4】:您是要允许传入自定义 user_id 还是始终使用该序列?
在第一种情况下,您需要类似:
CREATE OR REPLACE PROCEDURE insertexample (
user_id_in in sample.user_id%type,
name_in in sample.name%type,
age_in in sample.age%type
)
IS
BEGIN
insert into sample
(user_id, name, age
)
values (nvl(user_id_in, seq_user_id.nextval), name_in, age_in);
END insertexample;
如果你总是想使用序列(这可能是正确的选择),只需取出那个输入参数和 NVL:
CREATE OR REPLACE PROCEDURE insertexample (
name_in in sample.name%type,
age_in in sample.age%type
)
IS
BEGIN
insert into sample
(user_id, name, age
)
values (seq_user_id.nextval, name_in, age_in);
END insertexample;
【讨论】:
以上是关于Oracle 包中的自动增量的主要内容,如果未能解决你的问题,请参考以下文章