´æ´¢¹ý³ÌºÍ´æ´¢º¯Êý
l´æ´¢ÔÚ
Êý¾Ý¿âÖй©ËùÓÐÓû§³ÌÐòµ÷ÓõÄ×Ó³ÌÐò½Ð´æ´¢¹ý³Ì¡¢´æ´¢º¯Êý¡£
×¢Ò⣺´æ´¢¹ý³ÌÓë´æ´¢º¯ÊýÉùÃ÷±äÁ¿Ê±£¬ÓõÄÊÇas ¶ø²»ÊÇdeclare
´æ´¢¹ý³ÌÓë´æ´¢º¯ÊýÇø±ð
´æ´¢¹ý³Ì²»´øÓзµ»ØÖµ£¬´æ´¢º¯ÊýÓзµ»ØÖµ
´æ´¢¹ý³Ì
´´½¨´æ´¢¹ý³Ì
lÓÃCREATE PROCEDUREÃüÁÁ¢´æ´¢¹ý³Ì
lÓï·¨£º
create [or replace] PROCEDURE¹ý³ÌÃû(²ÎÊýÁбí)
AS
PLSQL×Ó³ÌÐòÌ壻
´´½¨´æ´¢¹ý³Ì¼òµ¥Ê¾Àý
/*
µÚÒ»¸ö´æ´¢¹ý³Ì£ºHello World
µ÷Óô洢¹ý³Ì£º
1. exec sayHello();
2. begin
sayHello();
end;
/
*/
create or replace procedure sayHello
as
--±äÁ¿ËµÃ÷
begin
dbms_output.put_line('Hello World');
end;
/
µ÷Óô洢¹ý³Ì
·½·¨Ò»
set serveroutput on
begin
raisesalary(7369);
end;
/
·½·¨¶þ
set serveroutput on
exec raisesalary(7369);
´æ´¢¹ý³Ì£¨Õǹ¤×ÊʵÀý£©
ʵÀýÒ»
Ϊָ¶¨µÄÖ°¹¤ÔÚÔ¹¤×ʵĻù´¡Éϳ¤10%µÄ¹¤×Ê£¬²¢´òÓ¡Õǹ¤×ÊǰºÍÕǹ¤×ʺóµÄ¹¤×Ê
´úÂ룺 **************************************************************************************************
/*
Ϊָ¶¨µÄÖ°¹¤ÔÚÔ¹¤×ʵĻù´¡Éϳ¤10%µÄ¹¤×Ê,²¢´òÓ¡Õǹ¤×ÊǰºÍÕǹ¤×ʺóµÄ¹¤×Ê
¿ÉÄÜÓõ½µÄsqlÓï¾ä
update emp set sal = sal * 1.1 where empno = empid;
*/
create or replace procedure raiseSalary(empid in number)
as
pSal emp.sal%type; --±£´æÔ±¹¤µ±Ç°¹¤×Ê
begin
--²éѯ¸ÃÔ±¹¤µÄ¹¤×Ê
select sal into pSal from emp where empno=empid;
--¸ø¸ÃÔ±¹¤Õǹ¤×Ê
update emp set sal = sal * 1.1 where empno = empid;
--´òÓ¡Õǹ¤×ÊǰºóµÄ¹¤×Ê
dbms_output.put_line('Ô±¹¤ºÅ:' || empid || ' Õǹ¤×Êǰ:' || psal || ' Õǹ¤×ʺó' || psal * 1.1);
end;
/
**************************************************************************************************
ʵÀý¶þ
Ϊָ¶¨Ô±¹¤Ôö¼ÓÖ¸¶¨¶î¶ÈµÄ¹¤×Ê(´«µÝ¶à¸ö²ÎÊý)
´úÂ룺 **************************************************************************************************
create or replace procedure raiseSalary2(empid in number, rate in NUMBER)
as
pSal emp.sal%type; --±£´æÔ±¹¤µ±Ç°¹¤×Ê
begin
--²éѯ¸ÃÔ±¹¤µÄ¹¤×Ê
select sal into pSal from emp where empno=empid;
--¸ø¸ÃÔ±¹¤Õǹ¤×Ê
update emp set sal = sal * rate where empno = empid;
--´òÓ¡Õǹ¤×ÊǰºóµÄ¹¤×Ê
dbms_output.put_line('Ô±¹¤ºÅ:' || empid || ' Õǹ¤×Êǰ:' || psal || ' Õǹ¤×ʺó' || psal * rate);
end;
/
**************************************************************************************************
´æ´¢º¯Êý
lº¯Êý£¨Function£©ÎªÒ»ÃüÃûµÄ´æ´¢³ÌÐò£¬¿É´ø²ÎÊý£¬²¢·µ»ØÒ»¼ÆËãÖµ¡£º¯ÊýºÍ¹ý³ÌµÄ½á¹¹ÀàËÆ£¬µ«±ØÐëÓÐÒ»¸öRETURN×Ӿ䣬ÓÃÓÚ·µ»Øº¯ÊýÖµ¡£º¯Êý˵Ã÷ÒªÖ¸¶¨º¯ÊýÃû¡¢½á¹ûÖµµÄÀàÐÍ£¬ÒÔ¼°²ÎÊýÀàÐ͵ȡ£
l½¨Á¢´æ´¢º¯ÊýµÄÓï·¨£º l
CREATE [OR REPLACE] FUNCTIONº¯ÊýÃû(²ÎÊýÁбí)
RETURN º¯ÊýÖµÀàÐÍ
AS
PLSQL×Ó³ÌÐòÌ壻
´æ´¢º¯ÊýʾÀý
ʾÀý£º²éѯijְ¹¤µÄÄêÊÕÈë¡£
´úÂ룺
****************************************************************************
/*
²éѯijְ¹¤µÄ×ÜÊÕÈë¡£
*/
create or replace function queryEmpSalary(empid in number)
RETURN NUMBER
as
pSal number; --¶¨Òå±äÁ¿±£´æÔ±¹¤µÄ¹¤×Ê
pComm number; --¶¨Òå±äÁ¿±£´æÔ±¹¤µÄ½±½ð
begin
select sal,comm into pSal, pcomm from emp where empno = empid;
return psal*12+ nvl(pcomm,0);
end;
/
****************************************************************************
´æ´¢º¯ÊýµÄµ÷ÓÃ
µ÷ÓÃÒ»
declare
v_salnumber;
begin
v_sal:=queryEmpSalary(7934);
dbms_output.put_line('salary is:' ||v_sal);
end;
/
µ÷Óöþ
begin
dbms_output.put_line('salaryis:' ||queryEmpSalary(7934));
end;
¹ý³ÌºÍº¯ÊýÖеÄinºÍout
lÒ»°ãÀ´½²£¬¹ý³ÌºÍº¯ÊýµÄÇø±ðÔÚÓÚº¯Êý¿ÉÒÔÓÐÒ»¸ö·µ»ØÖµ£»¶ø¹ý³ÌûÓзµ»ØÖµ¡£
lµ«¹ý³ÌºÍº¯Êý¶¼¿ÉÒÔͨ¹ýoutÖ¸¶¨Ò»¸ö»ò¶à¸öÊä³ö²ÎÊý¡£ÎÒÃÇ¿ÉÒÔÀûÓÃout²ÎÊý£¬ÔÚ¹ý³ÌºÍº¯ÊýÖÐʵÏÖ·µ»Ø¶à¸öÖµ¡£
´øoutº¯ÊýµÄ´æ´¢¹ý³ÌʾÀý
/*
out²ÎÊý£º²éѯij¸öÔ±¹¤µÄÐÕÃû£¬ÔÂнºÍְλ
*/
create or replace procedure queryEmpInfo(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
as
begin
select ename,sal,empjob into pename,psal,pjob from emp where empno=eno;
end;
/
ÔÚout²ÎÊýÖÐʹÓÃÓαê
lÊ×ÏÈÉêÃ÷°ü½á¹¹
lÈ»ºó´´½¨°üÌå
ÔÚJavaÓïÑÔÖзÃÎÊÓαêÀàÐ͵Äout²ÎÊý
´úÂëʵÏÖ£º
package demo.test;