我的包 pr_1、pr_2、pr_3 中有三個程式。無論執行順序如何,我都想在所有程序中使用相同編號的序列。
我怎樣才能做到這一點?當我嘗試將其設定為 head 規范中的全域變數時,例如:
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
我只需要所有程式的編號相同,但我不能將其作為引數執行,因為我不知道程式將按哪個順序執行,而且似乎可以為此設定全域變數。感謝您的任何建議。
uj5u.com熱心網友回復:
您走在正確的道路上,Package只是不要將值放在標題中。在包中創建訪問行程并在主體中而不是在任何程序/函式中定義全域變數。(見演示)
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;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/346754.html
下一篇:加入時sql無效識別符號
