PLSQL Language Referenc-PL/SQL靜態SQL-靜態SQL的描述-偽列

LuiseDalian發表於2014-03-14

偽列

1)靜態SQL包括下列SQL偽列:

CURRVALNEXTVALLEVELOBJECT_VALUEROWIDROWNUM

 

2PL/SQL中的CURRVALNEXTVAL

注意:每次引用 序列名.NEXTVAL,序列會立即增長並且永久增長,不管你提交還是回滾了事務。

可以在NUMBER型別出現的任何地方使用CURRVALNEXTVAL,然而:

n  使用這2個值為ADT方法引數提供預設值時,會引發編譯錯誤。

n  PL/SQL會計算CURRVALNEXTVAL每次出現時的值,而SQL是對於序列出現的每一行計算序列的值。

DROP TABLE employees_temp;

CREATE TABLE employees_temp AS

    SELECT employee_id, first_name, last_name

    FROM employees;

 

DROP TABLE employees_temp2;

CREATE TABLE employees_temp2 AS

    SELECT employee_id, first_name, last_name

    FROM employees;

 

DECLARE

    seq_value NUMBER;

BEGIN

    -- 產生初始序列值

    seq_value := employees_seq.NEXTVAL;

   

    DBMS_OUTPUT.PUT_LINE ('初始序列值: ' || TO_CHAR(seq_value)); 

 

    INSERT INTO employees_temp (employee_id, first_name, last_name)

    VALUES (employees_seq.NEXTVAL, 'Lynette', 'Smith');

 

    INSERT INTO employees_temp2 VALUES (employees_seq.CURRVAL, 'Morgan', 'Smith');

 

     --因為NEXTVAL可能被不同的使用者和應用程式所引用,並且一些NEXTVAL的值

     --可能沒有被儲存在資料庫中,所以值會產生斷續

     seq_value := employees_seq.CURRVAL;

 

     DELETE FROM employees_temp2 WHERE employee_id = seq_value; 

 

     UPDATE employees_temp SET employee_id = employees_seq.NEXTVAL

     WHERE first_name = 'Lynette'

     AND last_name = 'Smith';   

 

    seq_value := employees_seq.CURRVAL;

 

    DBMS_OUTPUT.PUT_LINE (序列的最後值: ' || TO_CHAR(seq_value));

END;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17013648/viewspace-1118613/,如需轉載,請註明出處,否則將追究法律責任。

相關文章