PL/SQLÃæÊÔÌâ 2010-04-29 14:25
Ò»¡¢ Çó1-100Ö®¼äµÄËØÊý
as i number; j number; is_prim boolean; begin
dbms_output.new_line;
dbms_output.put(to_char(2)||' '); for i in 3..inp loop begin
is_prim:=true;
for j in 2..trunc(sqrt(i)) loop if mod(i,j)=0 then begin
is_prim:=false; exit; end; end if; end loop;
if is_prim then dbms_output.put(to_char(i)||' '); end if; end; end loop;
dbms_output.new_line; end; /
exec is_prime(100)
set serverout on
create or replace procedure is_prime(inp number)
¶þ¡¢ ¶ÔËùÓÐÔ±¹¤,Èç¹û¸ÃÔ±¹¤Ö°Î»ÊÇMANAGER£¬²¢ÇÒÔÚDALLAS¹¤×÷ÄÇô¾Í¸øËûн½ð¼Ó15£¥£»Èç¹û¸ÃÔ±¹¤Ö°Î»ÊÇCLERK£¬²¢ÇÒÔÚNEW YORK¹¤×÷ÄÇô¾Í¸øËûн½ð¿Û³ý5£¥;ÆäËûÇé¿ö²»×÷´¦Àí
Èý¡¢¶ÔÖ±½ÓÉϼ¶ÊÇ'BLAKE'µÄËùÓÐÔ±¹¤£¬°´Õղμӹ¤×÷µÄʱ¼ä¼Óн£º 81Äê6ÔÂÒÔǰµÄ¼Óн10£¥ 81Äê6ÔÂÒÔºóµÄ¼Óн5£¥
Èý¡¢ ¸ù¾ÝÔ±¹¤ÔÚ¸÷×Ô²¿ÃÅÖеŤ×ʸߵÍÅųöÔÚ²¿ÃÅÖеÄÃû´Î(ÔÊÐí²¢ÁÐ).
ËÄ¡¢±àдһ¸ö´¥·¢Æ÷ʵÏÖÈçϹ¦ÄÜ£º ¶ÔÐÞ¸ÄÖ°¹¤Ð½½ðµÄ²Ù×÷½øÐкϷ¨ÐÔ¼ì²é£º
ËÄ¡¢ ±àдһ¸öPL/SQL³ÌÐò¿é£¬¶ÔÃû×ÖÒÔ\»ò\¿ªÊ¼µÄËùÓйÍÔ±°´ËûÃǵĻù±¾Ð½Ë®µÄ10%¼Óн¡£
Îå¡¢±àдһPL/SQL£¬¶ÔËùÓеÄ\ÏúÊÛÔ±\Ôö¼ÓÓ¶½ð500.
Áù¡¢±àдһPL/SQL£¬ÒÔÌáÉýÁ½¸ö×ʸñ×îÀϵÄ\Ö°Ô±\Ϊ\¸ß¼¶Ö°Ô±\¡££¨¹¤×÷ʱ¼äÔ½³¤£¬ÓÅÏȼ¶Ô½¸ß£© Æß¡¢±àдһPL/SQL£¬¶ÔËùÓйÍÔ±°´ËûÃÇ»ù±¾Ð½Ë®µÄ10%¼Óн£¬Èç¹ûËùÔö¼ÓµÄнˮ´óÓÚ5000£¬ÔòÈ¡Ïû¼Óн¡£
°Ë¡¢ÏÔʾEMPÖеĵÚËÄÌõ¼Ç¼¡£
¾Å¡¢.±àдһ¸ö¸øÌØÊâ¹ÍÔ±¼Óн10%µÄ¹ý³Ì£¬ÕâÖ®ºó£¬¼ì²éÈç¹ûÒѾ¹ÍÓ¶¸Ã¹ÍÔ±³¬¹ý60¸öÔ£¬Ôò¸øËû¶îÍâ¼Óн3000.
Ê®¡¢±àдһ¸öº¯ÊýÒÔ¼ì²éËùÖ¸¶¨¹ÍÔ±µÄнˮÊÇ·ñÓÐЧ·¶Î§ÄÚ¡£²»Í¬Ö°Î»µÄнˮ·¶Î§Îª£º
Ê®¶þ¡¢ÓÐÈçÏÂMyTable: ÈÕÆÚ ÈÕ²ú 1 3.3333 2 4.2222 3 1.5555 4 9.8888 5 ¡¡¡
ÒªÇóÓÃSQLÓï¾äÉú³ÉÈçϲéѯ ÈÕÆÚÈÕ²ú ÀÛ¼ÆÈÕ²ú 1 3.3333 3.3333 2 4.2222 7.5555 3 1.5555 9.0000 4 9.8888 18.8888 5¡¡¡
Ê®Èý¡¢´´½¨Ò»¸öÐòÁУ¬µÚÒ»´Î´Ó5Ñ»·µ½10£¬ÒÔºóÔÙ´Ó0¿ªÊ¼Ñ»·
Ò»¡¢ Çó1-100Ö®¼äµÄËØÊý declare
fag boolean:=true; begin
for i in 1..100 loop for j in 2..i-1 loop if mod(i,j)=0 then fag:=false; end if; end loop; if fag then
dbms_output.put_line(i); end if; fag:=true; end loop; end;
¶þ¡¢ ¶ÔËùÓÐÔ±¹¤,Èç¹û¸ÃÔ±¹¤Ö°Î»ÊÇMANAGER£¬²¢ÇÒÔÚDALLAS¹¤×÷ÄÇô¾Í¸øËûн½ð¼Ó15£¥£»Èç¹û¸ÃÔ±¹¤Ö°Î»ÊÇCLERK£¬²¢ÇÒÔÚNEW YORK¹¤×÷ÄÇô¾Í¸øËûн½ð¿Û³ý5£¥;ÆäËûÇé¿ö²»×÷´¦Àí declare
cursor c1 is select * from emp; c1rec c1%rowtype; v_loc varchar2(20); begin
for c1rec in c1 loop
select loc into v_loc from dept where deptno = c1rec.deptno; if c1rec.job = 'MANAGER' and v_loc = 'DALLAS' then
update emp set sal = sal * 1.15 where empno = c1rec.empno;
elsif c1rec.job='CLERK' and v_loc = 'NEW YORK' then
update emp set sal = sal * 0.95 where empno = c1rec.empno; else null; end if; end loop; end;
Èý¡¢¶ÔÖ±½ÓÉϼ¶ÊÇ'BLAKE'µÄËùÓÐÔ±¹¤£¬°´Õղμӹ¤×÷µÄʱ¼ä¼Óн£º 81Äê6ÔÂÒÔǰµÄ¼Óн10£¥ 81Äê6ÔÂÒÔºóµÄ¼Óн5£¥ declare
cursor c1 is select * from emp where mgr = (select
empno from emp where ename='BLAKE'); --Ö±½ÓÉϼ¶ÊÇ'BLAKE'µÄËùÓÐÔ±¹¤ c1rec c1%rowtype; begin
for c1rec in c1 loop
if c1rec.hiredate < '01-6ÔÂ-81' then
update emp set sal = sal * 1.1 where empno = c1rec.empno; else
update emp set sal = sal * 1.05 where empno = c1rec.empno; end if; end loop; end;
Èý¡¢ ¸ù¾ÝÔ±¹¤ÔÚ¸÷×Ô²¿ÃÅÖеŤ×ʸߵÍÅųöÔÚ²¿ÃÅÖеÄÃû´Î(ÔÊÐí²¢ÁÐ). <1> Ò»ÌõSQLÓï¾ä
select deptno,ename,sal,(select count(*) + 1 from emp where deptno = a.deptno and sal > a.sal) as ord from emp a
order by deptno,sal desc;
<2> PL/SQL¿é declare cursor cc is
select * from dept; ccrec cc%rowtype;
cursor ck(no number) is
select * from emp where deptno = no order by sal desc;
ckrec ck%rowtype;
i number;
Ïà¹ØÍÆ¼ö£º