Welcome 微信登录

首页 / 数据库 / MySQL / PL/SQL中的procedure和function编程

PL/SQL中的procedure和function编程 procedure:存储过程eg: create or replace procedure p --这儿是和plsql的区别iscursor cisselect * from emp2 for update;--v_temp c%rowtype; begin for v_temp in cloopif(v_temp.sal< 2000) thenupdate emp2 set sal=sal*2 where current of c ;elsif(v_temp.sal = 5000) thendelete from emp2 where current of c;end if;end loop;commit;end; 执行过程的命令:exec p; begin p end; 带参数的存储过程;create or replace procedure p --in表示传入参数 out传出参数,(v_a in number,v_b number ,v_ret out number,v_temp in out number)is beginif(v_a > v_b) thenv_ret :=v_a;elsev_ret:=v_b;end if;v_temp := v_temp+1;end; 调用过程:declarev_a number := 3;
v_b number := 4;
v_ret number ;
v_temp number := 5; beginp(v_a,v_b,v_ret,v_temp);dbms_output.put_line(v_ret);dbms_output.put_line(v_temp);end; 函数:function create or replacefunctionsal_tax(v_sal number) --声明了一个函数
return numberisbeginif(v_sal < 2000) thenreturn 0.10;elsif(v_sal < 2750) thenreturn 0.15;elsereturn 0.20;end if;end; 函数的调用::select lower(ename),sal_tax(sal) from emp; 触发器:trigger 不能直接执行,依赖于表create table emp2_log(uname varchar2(20),action varchar2(10),atime date); 创建触发器 create or replacetrigger trigafter insert or delete or update on emp2 for each rowbeginifinserting theninsert intoemp2_log values (USER,"insert",sysdate);elsifupdating theninsert into emp2_log values(USER,"update",sysdate);elsif deleting theninsert into emp2_log values (USER,"delete",sysdate);end if;end; update emp2 set sal=sal*2 where deptno = 30; drop triggle trig;(删除) create or replace trigger trigafter update on deptfor each row beginupdate emp set deptno =:NEW.deptno where deptno =:OLD.deptno;end; update dept set deptno = 99 where deptno = 10; 树状结构的存储于显示: create table ariticle(id number primary key,cont varchar2(4000),pid number,isleaf number(1), -- 0代表非叶子节点,1代表叶子节点
alevel number(2)); insert into ariticle values(1,"ahshdhshd",0,0,0);insert into ariticle values(2,"bhshdhshd",1,0,1);insert into ariticle values(3,"chshdhshd",2,1,2);insert into ariticle values(4,dhshdhshd",2,0,2);insert into ariticle values(5,"ehshdhshd",4,1,3);insert into ariticle values(6,"fhshdhshd",10,1);insert into ariticle values(7,"ghshdhshd",6,1,0);insert into ariticle values(8,"hhshdhshd",3,0,4);insert into ariticle values(9,"ihshdhshd",7,0,0);insert into ariticle values(10,"jhshdhshd",9,0,3); commit;(提交)   create or replace procudure p (v_pid ariticle.pid%type,v_level binary_integer)is cursor cis select * from ariticle where pid = v__pid;v_preStr varchar2(1024) :="";beginfor i in 0..v_level loopv_preStr :=v_preStr || " ";for v_ariticle in cloopdbms_output.put_line(v_preStr || v_ariticle.cont);if (v_ariticle.isleaf = 0) thenp(v_ariticle.id,v_level+1);end if;end loop;end; exec p(0);更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12MySQL和Oracle数据库中的分页查询PL/SQL编程中变量的声明相关资讯      PL/SQL 
  • PL/SQL之存储过程和函数  (今 14:09)
  • PL/SQL Developer连接本地Oracle   (07月27日)
  • 【PL/SQL系列】Oracle存储过程使用  (04月23日)
  • PL/SQL Developer 使用技巧分享  (09月16日)
  • PL/SQL实现Java中的split()方法的  (07月10日)
  • 从一个案例看PL/SQL代码片的编译与  (03月04日)
本文评论 查看全部评论 (0)
表情: 姓名: 字数