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;
第二のアプローチは歴史目的のためだけのものだと思います。
最初のバージョンはOracle 11gで利用可能になりましたが、その前にSELECT seq_name.nextVal FROM dual
。違いはなんですか?まあ、最初の方が私の意見では読みやすいです。
さらに、彼のサイトのTim Hallは、ドキュメントによると、最初の(新しい)アプローチでパフォーマンスを改善できると書いています。彼はいくつかのテストを行いましたが、違いはわずかでした。
Tim Hallのサイトで詳細をご覧ください: PL/SQLでのシーケンスとNEXTVAL
一方、ここで述べたように PL/SQLでのNEXTVALの使用について-Oracle 11g 、nextVal
値のフェッチの基本的な実装は変更されていないため、実際には変わりはない。