2016-12-16 11 views
2

私は変数に値を必要とするプロシージャを作成しています。このプロシージャでは、変更と持続の両方が可能です。 値が持続するPL/SQLで変数を作成するにはどうすればよいですか?

具体的には、これは10001から始まり、プロシージャが呼び出されるたびに増分するカウンタである必要があります。私はいくつかの他の値に連結される必要があり、それが返される(別のテーブルのID生成に使用される)ので、この値を返すことを検討していません。

SQL PLUSでバインド変数を使用していますが、これは役に立たないようです。私はこの1つの値のテーブルを作成したくないです。これを可能にするオプションはありますか?

SQL> exec testSeq; 
Seq is 1 

PL/SQL procedure successfully completed. 

SQL> exec testSeq; 
Seq is 2 

PL/SQL procedure successfully completed. 

SQL> exec testSeq; 
Seq is 3 

PL/SQL procedure successfully completed. 

は、Oracleのバージョンに応じて、あなたができないことがあります。

+2

[シーケンス](https://docs.oracle.com/cd) /B12037_01/server.101/b10759/statements_6014.htm)? – mustaccio

答えて

5

おそらくsequence

create sequence proc_seq start with 1; 
create or replace procedure testSeq is 
begin 
    dbms_output.put_line('Seq is ' || proc_seq.nextVal); 
end; 

プロシージャを呼び出すたびに、値が1増加される必要があるかもしれません私のようにシーケンスを使用する。この場合、SQL文のシーケンスを使用して、変数を使用してシーケンスの値を格納できます。

create or replace procedure testSeq is 
    s number; 
begin 
    select proc_seq.nextVal into s from dual; 
    dbms_output.put_line('Seq is ' || s); 
end; 
+0

恐ろしい!どうもありがとうございます!私はPL/SQLが初めてで、これが存在するのかどうかはわかりませんでした! –

+0

私が提案した最初の実装を使用しましたが(他の誰かが読めるようにOracle 12Cを実行しています)、完全に機能しました!ありがとうございました! –

関連する問題