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;