PLSQL±à³ÌÓïÑÔµÄʹÓÃÓë³ÌÐòÉè¼Æ

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.

ÁªÏµ¿Í·þ£º779662525#qq.com(#Ìæ»»Îª@)