web-dev-qa-db-ja.com

PLSQL:VARBIABLE:= SEQUENCE.NEXTVALまたはSELECT SEQUENCE.NEXTVALからデュアルからVARIABLEへ?

PL/SQLとの違いは何ですか:

CREATE OR REPLACE FUNCTION WBAR_TEST_1 RETURN NUMBER IS
  LN_TMP NUMBER;
BEGIN
  LN_TMP := SOME_SEQUENCE.NEXTVAL;
  RETURN LN_TMP;
END WBAR_TEST_1;

そして

CREATE OR REPLACE FUNCTION WBAR_TEST_2 RETURN NUMBER IS
  LN_TMP NUMBER;
BEGIN
  SELECT SOME_SEQUENCE.NEXTVAL INTO LN_TMP FROM DUAL;
  RETURN LN_TMP;
END WBAR_TEST_2;

第二のアプローチは歴史目的のためだけのものだと思います。

9
WBAR

最初のバージョンはOracle 11gで利用可能になりましたが、その前にSELECT seq_name.nextVal FROM dual。違いはなんですか?まあ、最初の方が私の意見では読みやすいです。

さらに、彼のサイトのTim Hallは、ドキュメントによると、最初の(新しい)アプローチでパフォーマンスを改善できると書いています。彼はいくつかのテストを行いましたが、違いはわずかでした。

Tim Hallのサイトで詳細をご覧ください: PL/SQLでのシーケンスとNEXTVAL

一方、ここで述べたように PL/SQLでのNEXTVALの使用について-Oracle 11gnextVal値のフェッチの基本的な実装は変更されていないため、実際には変わりはない。

16