2013-10-25 5 views
7

Was Unterschied ist in PL/SQL aus:PLSQL: VARBIABLE: = SEQUENCE.NEXTVAL oder SELECT SEQUENCE.NEXTVAL in VARIABLE von Dual?

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; 

und

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; 

Ich denke, dass der zweite Ansatz nur nur für die Geschichte ist ähnlich.

Antwort

11

Die erste wurde mit Oracle 11g verfügbar, vorher mussten Sie SELECT seq_name.nextVal FROM dual. Was ist der Unterschied? Nun, der erste ist meiner Meinung nach leichter zu lesen.

Darüber hinaus schrieb Tim Hall auf seiner Website, dass nach der Dokumentation der erste (neue) Ansatz die Leistung verbessern kann. Er führte einige Tests durch, aber der Unterschied war marginal.

Lesen Sie mehr über Tim Hall Website: Sequences and NEXTVAL in PL/SQL

Auf der anderen Seite, wie hier About using NEXTVAL in PL/SQL - Oracle 11g angegeben, ist die zugrunde liegende Implementierung der nextVal Wert des Abrufens hat sich nicht geändert, so in der Tat sollte es keinen Unterschied.