seq.nextval 作为全局变量 Oracle
seq.nextval as global variable Oracle
我的程序包中有三个程序 pr_1、pr_2、pr_3。我想在所有过程中使用相同编号的序列,而不考虑执行顺序。
我怎样才能做到这一点?
当我尝试将它设置为头规范中的全局变量时,如:
next_seq_val CONSTANT NUMBER := SEQ.NEXTVAL
我得到了要求的结果:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 22
next_seq_val is pr_3: 22
但是我用同样的程序再次执行包后,还是得到了同样的结果:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 22
next_seq_val is pr_3: 22
应该是 23。
我也试过用简单的功能:
FUNCTION GetSeqValue
RETURN NUMBER
IS
BEGIN
RETURN your_sequence.NEXTVAL;
END;
并将其放入程序中,当然结果是:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 23
next_seq_val is pr_3: 24
我只需要所有程序都使用相同的编号,但我不能将其作为参数,因为我不知道程序将以何种顺序执行,而且似乎可以为此放置全局变量。感谢您的任何建议。
你在 Package
的正确路径上,只是不要将值放在 header 中。在包中创建访问进程并在 body 中定义 global 变量,但不在任何 procedure/function 中。 (参见 demo)
create or replace package seq_val_pkg is
procedure set_val;
function next_val return integer;
end seq_val_pkg;
create or replace package body seq_val_pkg is
g_seq_val integer := null;
procedure set_val is
begin
g_seq_val := your_sequence.nextval;
end set_val ;
function next_val return integer is
begin
return g_seq_val;
end next_val;
begin
-- Pacakge initialization code. This runs once when the pacakge is loaded.
set_val;
end seq_val_pkg;
我的程序包中有三个程序 pr_1、pr_2、pr_3。我想在所有过程中使用相同编号的序列,而不考虑执行顺序。
我怎样才能做到这一点? 当我尝试将它设置为头规范中的全局变量时,如:
next_seq_val CONSTANT NUMBER := SEQ.NEXTVAL
我得到了要求的结果:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 22
next_seq_val is pr_3: 22
但是我用同样的程序再次执行包后,还是得到了同样的结果:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 22
next_seq_val is pr_3: 22
应该是 23。
我也试过用简单的功能:
FUNCTION GetSeqValue
RETURN NUMBER
IS
BEGIN
RETURN your_sequence.NEXTVAL;
END;
并将其放入程序中,当然结果是:
next_seq_val in pr_1: 22
next_seq_val in pr_2: 23
next_seq_val is pr_3: 24
我只需要所有程序都使用相同的编号,但我不能将其作为参数,因为我不知道程序将以何种顺序执行,而且似乎可以为此放置全局变量。感谢您的任何建议。
你在 Package
的正确路径上,只是不要将值放在 header 中。在包中创建访问进程并在 body 中定义 global 变量,但不在任何 procedure/function 中。 (参见 demo)
create or replace package seq_val_pkg is
procedure set_val;
function next_val return integer;
end seq_val_pkg;
create or replace package body seq_val_pkg is
g_seq_val integer := null;
procedure set_val is
begin
g_seq_val := your_sequence.nextval;
end set_val ;
function next_val return integer is
begin
return g_seq_val;
end next_val;
begin
-- Pacakge initialization code. This runs once when the pacakge is loaded.
set_val;
end seq_val_pkg;