PLSQL:VARBIABLE:=SEQUENCE.NEXTVAL或从dual中选择SEQUENCE.NEXTVAL作为变量?

PLSQL:VARBIABLE:=SEQUENCE.NEXTVAL或从dual中选择SEQUENCE.NEXTVAL作为变量?,plsql,oracle11g,oracle11gr2,Plsql,Oracle11g,Oracle11gr2,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; 及 我认为第二种方法仅用于历史目的。第一种方法可用于Oracle 11g,在此之前,您必须从dual中选择seq_name.nextVal。有什么区别?嗯,在我看来,第一个更容

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;


我认为第二种方法仅用于历史目的。

第一种方法可用于Oracle 11g,在此之前,您必须从dual中选择seq_name.nextVal。有什么区别?嗯,在我看来,第一个更容易阅读

此外,Tim Hall在他的网站上写道,根据文档,第一种(新)方法可以提高性能。他做了一些测试,但差别不大

在Tim Hall的网站上阅读更多内容:

另一方面,如本文所述,获取
nextVal
值的底层实现没有改变,因此实际上应该没有区别

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;