oracle ±Ê¼Ç VI Ö®Óαê (CURSOR)
Óαê(CURSOR),ºÜÖØÒª
Óαê:ÓÃÓÚ´¦Àí¶àÐмǼµÄÊÂÎñ
ÓαêÊÇÒ»¸öÖ¸ÏòÉÏÏÂÎĵľä±ú(handle)»òÖ¸Õë,¼òµ¥Ëµ£¬Óαê¾ÍÊÇÒ»¸öÖ¸Õë
1 ´¦ÀíÏÔʽÓαê
ÏÔʽÓα괦ÀíÐè 4¸ö PL/SQL ²½Öè,ÏÔʾÓαêÖ÷ÒªÓÃÓÚ´¦Àí²éѯÓï¾ä
(1) ¶¨ÒåÓαê
¸ñʽ: CURSOR cursor_name [(partment[,parameter]...)] IS select_statement;
¶¨ÒåµÄÓα겻ÄÜÓÐ INTO ×Ó¾ä
(2) ´ò¿ªÓαê
OPEN cursor_name[...];
PL/SQL ³ÌÐò²»ÄÜÓà OPEN Óï¾äÖØ¸´´ò¿ªÒ»¸öÓαê
(3)ÌáÈ¡ÓαêÊý¾Ý
FETCH cursor_name INTO {variable_list | record_variable};
(4) ¹Ø±ÕÓαê
CLOSE cursor_name;
Àý 1 ²éѯǰ 10 ÃûÔ±¹¤µÄÐÅÏ¢
declare
--¶¨ÒåÓαê
cursor c_cursor is select last_name,salary from employees where rownum < 11 order by salary;
v_name employees.last_name%type;
V_sal employees.salary%type;
begin
--´ò¿ªÓαê
open c_cursor;
-- ÌáÈ¡ÓαêÊý¾Ý
fetch c_cursor into v_name,v_sal;
while c_cursor %found loop
dbms_output.put_line(v_name || ':' || v_sal);
fetch c_cursor into v_name,v_sal;
end loop;
--¹Ø±ÕÓαê
close c_cursor;
end;
----------------------------------
Á·Ï°: ÊäÈ벿ÃźŠdep_id,²éѯ¸Ã²¿Ãŵį½¾ù¹¤×Ê : avg_sal,Ô±¹¤¹¤×ÊΪ salary
Èô salary < avg_sal - 500 ¹¤×ÊÕÇ 500
Èô avg_sal - 500 <= salary < avg_sal + 500 ¹¤×ÊÕÇ 300
Èô
Ïà¹ØÎĵµ£º
Êý¾Ý×Öµädict×ÜÊÇÊôÓÚOracleÓû§sysµÄ¡£
¡¡¡¡1¡¢Óû§£º
¡¡¡¡¡¡select username from dba_users;
¡¡¡¡¸Ä¿ÚÁî
¡¡¡¡¡¡alter user spgroup identified by spgtest;
¡¡¡¡2¡¢±í¿Õ¼ä£º
¡¡¡¡¡¡select * from dba_data_files;
¡¡¡¡¡¡select * from dba_tablespaces;//±í¿Õ¼ä
¡¡¡¡¡¡select tablespace_name,sum(bytes), sum(b ......
¿ª·¢×éÔÚÊý¾ÝÇ¨ÒÆÊ±£¬±¨¸æ·¢ÏÖһЩÊýֵΪ'0000/00/00'µÄdateÊý¾Ý£¬µ¼ÖÂÊý¾ÝÇ¨ÒÆÊ§°Ü¡£
Õâ¸öÎÊÌâÓÐµãÆæ¹Ö£¬ÒòΪÔÚOracleÖУ¬dateÀàÐ͵ÄÊý¾ÝµÄȡֵ·¶Î§ÊÇ´Ó-4712/12/31µ½9999/12/31Ö®¼ä£¬²¢ÇÒÄê·Ý²»ÄÜΪ0¡£Ò²¾ÍÊÇ˵'0000/00/00'ÊÇÒ»¸ö·Ç·¨Êý¾Ý£¬²»ÎªOracleËù½ÓÊÜ¡£
SQL> select to_date('0000-00-00', 'yyyy-mm- ......
Stream ÊÇOracle µÄÏûÏ¢¶ÓÁÐ(Ò²½ÐOracle Advanced Queue)¼¼ÊõµÄÒ»ÖÖÀ©Õ¹Ó¦ÓᣠOracle µÄÏûÏ¢¶ÓÁÐÊÇͨ¹ý·¢²¼/¶©Ôĵķ½Ê½À´½â¾öʼþ¹ÜÀí¡£Á÷¸´ÖÆ(Stream replication)Ö»ÊÇ»ùÓÚËüµÄÒ»¸öÊý¾Ý¹²Ïí¼¼Êõ£¬Ò²¿ÉÒÔ±»ÓÃ×÷Ò»¸ö¿ÉÁé»î¶¨ÖƵĸ߿ÉÓÃÐÔ·½°¸¡£ Ëü¿ÉÒÔʵÏÖÁ½¸öÊý¾Ý¿âÖ®¼äÊý¾Ý¿â¼ ......
ÐòÁÐ(SEQUENCE)ÊÇÐòÁкÅÉú³ÉÆ÷£¬¿ÉÒÔΪ±íÖеÄÐÐ×Ô¶¯Éú³ÉÐòÁкţ¬²úÉúÒ»×éµÈ¼ä¸ôµÄÊýÖµ(ÀàÐÍΪÊý×Ö)¡£ÆäÖ÷ÒªµÄÓÃ;ÊÇÉú³É±íµÄÖ÷¼üÖµ£¬¿ÉÒÔÔÚ²åÈëÓï¾äÖÐÒýÓã¬Ò²¿ÉÒÔͨ¹ý²éѯ¼ì²éµ±Ç°Öµ£¬»òʹÐòÁÐÔöÖÁÏÂÒ»¸öÖµ¡£
´´½¨ÐòÁÐÐèÒªCREATE SEQUENCEϵͳȨÏÞ¡£ÐòÁеĴ´½¨Óï·¨ÈçÏ£º
CREATE SEQUENCE ÐòÁÐÃû
[INCREMENT BY n]
[ST ......
1. flashback table table_test to timestamp to_timestamp('20091103000000','yyyymmddhh24miss');
2.Èç¹û報錯ORA-08189: cannot flashback the table because row movement is not enabled
3.alter table table_test enable row movement;
4.OK ......