End loop; -- µÚÈý²¿·Ö£º¹Ø¼ü×ÖEnd loop½áÊøÑ»· ¡
LOOP-EXIT WHEN-ENDÑ»·£º
³ýÍ˳öÌõ¼þ¼ì²âÓÐËùÇø±ðÍ⣬´Ë½á¹¹Óëǰһ¸öÑ»·½á¹¹ÀàËÆ¡£ cnt:=1; --ÔÚÑ»·¿ªÊ¼Ç°£¬³õʼ»¯Ñ»·¼ÆÊýÆ÷
loop --µÚÒ»²¿·Ö£ºÒÔÑ»·¹Ø¼ü×Öloop¿ªÊ¼Ñ»· cnt:=cnt+1; --µÚ¶þ²¿·Ö£ºÔö¼ÓÑ»·¼ÆÊýÆ÷µÄÖµ exit when cnt>=100 -- ²âÊÔcntÊÇ·ñ·ûºÏÍ˳öÌõ¼þ ¡
End loop; -- µÚÈý²¿·Ö£º¹Ø¼ü×ÖEnd loop½áÊøÑ»· ¡
WHILE-LOOP-ENDÑ»·£º
´Ë½á¹¹ÔÚÑ»·µÄwhile²¿·Ö²âÊÔÍ˳öÌõ¼þ¡£ cnt:=1; --ÔÚÑ»·¿ªÊ¼Ç°£¬³õʼ»¯Ñ»·¼ÆÊýÆ÷
while cnt < 100 loop --µÚÒ»²¿·Ö£ºÔÚÿ´ÎÖ´ÐÐÑ»·Ç°£¬while¶¼Òª¼ì²éÍ˳öÌõ¼þ ¡ --µÚ¶þ²¿·Ö£ºÑ»·ÌåÄÚ²¿µÄ¿ÉÖ´ÐдúÂë cnt:=cnt+1; --Ôö¼ÓÑ»·¼ÆÊýÆ÷µÄÖµÒÔÂú×ãÍ˳öÌõ¼þ ¡
End loop; --µÚÈý²¿·Ö£º¹Ø¼ü×ÖEnd loop½áÊøÑ»· ¡
FOR-IN-LOOP-ENDÑ»·£º
×îºó½éÉܵÄÕâÖÖÑ»·½á¹¹Öظ´Ö´ÐÐÔ¤¶¨Òå´ÎÊýµÄÑ»·¡£¸ÃÑ»·½á¹¹Ò²ÓÉÈý²¿·Ö×é³É£º for in²¿·Ö¶¨Òå¸ú×ÙÑ»·µÄ±äÁ¿£»
Ö´ÐÐÑ»·ÌåÖеÄÒ»Ìõ»ò¶àÌõÓï¾ä£¬Ö±ÖÁ¿ØÖÆÑ»·µÄ±äÁ¿Âú×ãÍ˳öÌõ¼þΪֹ£» end loop²¿·Ö½áÊøÑ»·¡£
ÏÂÃæÊÇÒ»¸ö˵Ã÷ÈçºÎʹÓÃÕâÖÖÑ»·»úÖÆµÄÀý×Ó£º for cnt in 1..3 loop insert into tabl values(¡®Still in loop¡¯,cnt); end loop; Àý£º
1£®ÔÚSQL*PlusÖÐʹÓÃPL/SQL¿é´¦Àí
EMP±íÖÐÖ°¹¤ºÅ7788µÄÖ°¹¤£¬Èç¹û¹¤×ÊСÓÚ3000ÄÇô°Ñ¹¤×ʸü¸ÄΪ3000£º SQL>DECLARE x NUMBER(7,2); BEGIN
SELECT sal INTO x FROM emp WHERE empno = 7788;
IF x < 3000 THEN
UPDATE emp SET sal = 3000 WHERE empno = 7788; END IF; END;
×¢£ºPL/SQL¿éÔÚSQL*PlusÖÐÒÔµãºÅ£¨.£©½áÊø¡£
Èç¹ûÏëÔËÐлº³åÇøµÄÄÚÈÝ£¬ÄÇô¿ÉÒÔÓÃRUNÃüÁî»òÕß/ÃüÁî¡£ 2£®ÎÞ²ÎÊýµÄ´æ´¢¹ý³Ì
Ê×ÏÈ´´½¨±í£º
SQL> create table log_table( 2 user_id varchar2(10), 3 log_date varchar2(12));
CREATE OR REPLACE PROCEDURE log_execution IS
BEGIN
INSERT INTO log_table (user_id,log_date) VALUES (user,sysdate); END; /
´æ´¢¹ý³ÌµÄÔÚSQL*PlusÖÐÔËÐÐ SQL>EXECUTE log_execution;
3£®´øÊäÈë²ÎÊýµÄ´æ´¢¹ý³Ì
½â¹Í¸ø¶¨Ö°¹¤ºÅµÄÖ°¹¤£¬²¢µ÷ÓÃlog_execution£º SQL> CREATE OR REPLACE PROCEDURE fire_emp
2 (v_emp_no IN emp.empno%type) 3 IS
4 BEGIN
5 Log_execution;
6 DELETE FROM EMP WHERE empno = v_emp_no; 7 END; 8 /
SQL>EXECUTE fire_emp(7654);
´æ´¢¹ý³Ìɾ³ýÁËÖ°¹¤ºÅ7654µÄÖ°¹¤¡£
4£®´øÊäÈëÊä³öµÄ´æ´¢¹ý³Ì
²éѯEMPÖиø¶¨Ö°¹¤ºÅµÄÐÕÃû¡¢¹¤×ʺÍÓ¶½ð¡£
SQL> CREATE OR REPLACE PROCEDURE query_emp 2 (v_emp_no IN emp.empno%type, 3 v_emp_name OUT emp.ename%type, 4 v_emp_sal OUT emp.sal%type, 5 v_emp_comm OUT emp.comm%type) 6 IS
7 BEGIN
8 SELECT ename,sal,comm
9 INTO v_emp_name,v_emp_sal,v_emp_comm 10 FROM EMP WHERE empno = v_emp_no; 11 END; 12 /
µ÷Óãº
SQL>VAR emp_name varchar2(15); SQL>VAR emp_sal number; SQL>VAR emp_comm number;
SQL>EXECUTE query_emp(7566,:emp_name, :emp_sal, :emp_comm); PL/SQL procedure successfully completed. SQL>PRINT emp_name EMP_NAME ------------------- JONES
»òÕßÓÃÒÔÏÂÓï¾äµ÷Ó㺠DECLARE
emp_name varchar2(15); emp_sal number; emp_comm number; BEGIN
query_emp(7566,emp_name, emp_sal, emp_comm);
DBMS_OUTPUT.PUT_LINE(emp_name||' '|| emp_sal||' '||emp_comm); END;
5£®ÓÃFunction²éѯ³öEMPÖиø¶¨Ö°¹¤ºÅµÄ¹¤×Ê SQL> CREATE OR REPLACE FUNCTION get_sal
2 (v_emp_no IN emp.empno%type) 3 RETURN number 4 AS
5 V_emp_sal emp.sal%type:= 0; 6 BEGIN
7 SELECT sal INTO v_emp_sal
8 FROM EMP WHERE empno = v_emp_no; 9 RETURN (v_emp_sal); 10 END; 11 /
SQL>VARIABLE emp_sal number;
SQL>EXECUTE :emp_sal := get_sal(7566); PL/SQL procedure successfully completed. SQL>PRINT emp_sal; EMP_SAL ------------------- 2975
¡¾ÊµÑéÄÚÈÝ¡¿
1¡¢ ²éѯÃûΪ¡°SMITH¡±µÄÔ±¹¤ÐÅÏ¢£¬Êä³öÆäÔ±¹¤ºÅ¡¢¹¤×Ê¡¢²¿Ãźš£Èç¹û¸ÃÔ±¹¤²»´æÔÚ£¬
Ôò²åÈëÒ»ÌõмǼ£¬Ô±¹¤ºÅΪ2007£¬Ô±¹¤ÃûΪ¡°SMITH¡±£¬¹¤×ÊΪ1500£¬²¿ÃźÅΪ10.
2¡¢ ´´½¨Ò»¸ö´æ´¢¹ý³Ì£¬ÒÔÔ±¹¤ºÅΪ²ÎÊý£¬Êä³ö¸ÃÔ±¹¤µÄ¹¤×Ê¡£
3¡¢ ´´½¨Ò»¸ö´æ´¢¹ý³Ì£¬ÒÔÔ±¹¤ºÅΪ²ÎÊý£¬Ð޸ĸÃÔ±¹¤µÄ¹¤×Ê¡£Èô¸ÃÔ±¹¤ÊôÓÚ10ºÅ²¿ÃÅ£¬
Ôò¹¤×ÊÔö¼Ó150£»ÈôÊôÓÚ20ºÅ²¿ÃÅ£¬Ôò¹¤×ÊÔö¼Ó200£»ÈôÊôÓÚ30ºÅ²¿ÃÅ£¬Ôò¹¤×ÊÔö¼Ó250£»ÈôÊôÓÚÆäËû²¿ÃÅ£¬Ôò¹¤×ÊÔö¼Ó300.