伪列
(1)静态SQL包括下列SQL伪列:
CURRVAL、NEXTVAL、LEVEL、OBJECT_VALUE、ROWID、ROWNUM
(2)PL/SQL中的CURRVAL和NEXTVAL
注意:每次引用 序列名.NEXTVAL,序列会立即增长并且永久增长,不管你提交还是回滚了事务。
可以在NUMBER类型出现的任何地方使用CURRVAL和NEXTVAL,然而:
n 使用这2个值为ADT方法参数提供默认值时,会引发编译错误。
n PL/SQL会计算CURRVAL和NEXTVAL每次出现时的值,而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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/17013648/viewspace-1118613/