当前位置: 代码迷 >> SQL >> PL/SQL函数跟过程
  详细解决方案

PL/SQL函数跟过程

热度:68   发布时间:2016-05-05 11:27:58.0
PL/SQL函数和过程
匿名PL/SQL函数块
--每次使用进行编译,不存储进数据库,不能在其他PL/SQL块中调用;

过程、函数、包和触发器
--带名块,存储在数据库中,能在其他块中调用;
函数有返回值,存储过程不需要返回值

存储过程
CREATE OR REPLACE PROCEDURE /*创建或者更新*/ first_pro/*(可以加参数列表如: num [ IN | OUT | IN OUT ] NUMBER)*/  IS  v_now_date date;BEGIN  v_now_date:=SYSDATE;  DBMS_OUTPUT.PUT_LINE(v_now_date);END first_pro;--名字可加可不加execute first_pro();--执行过程或函数create or replace procedure secound_prois  v_empno emp.empno%type:=9527;  v_ename emp.ename%type:='chen';  v_job emp.job%type:='programer';  v_mgr emp.mgr%type:=08;  v_hiredate emp.hiredate%type:=to_date('2014-4-28','yyyy-MM-dd');  v_sal emp.sal%type:=3800;  v_comm emp.comm%type:=1000;  v_deptno emp.deptno%type:=8;begin  insert into emp (empno,ename,job,mgr,hiredate,sal,comm,deptno)values(v_empno,v_ename,v_job,v_mgr,v_hiredate,v_sal,v_comm,v_deptno);end secound_pro;execute secound_pro();create or replace procedure three_pro(no in emp.empno%type)isbeginupdate emp set sal=1900 where empno=no;end three_pro;execute three_pro(9527);DROP PROCEDURE first_pro;--删除存储过程

函数
CREATE OR REPLACE FUNCTION  first_fn/*(可以加参数列表如: num [ IN | OUT | IN OUT ] NUMBER)*/--函数中尽量避免使用out和 in out参数模式RETURN NUMBER --返回值类型ISv_sal emp.sal%TYPE;BEGINselect sal into v_sal from emp where ename='chen';RETURN v_sal;EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE('no data!');RETURN null;END first_fn;--调用函数:函数具有返回值,所以函数不同于存储过程可以成为一条独立的语句,函数则是作为表达式的一部分存在select first_fn sal from dual;--或者VAR salary NUMBER;EXEC :salary:=first_fn;PRINT salary;--或者在DBMS_OUTPUT.PUT_LINE中打印EXEC DBMS_OUTPUT.PUT_LINE('salary is '||first_fn);--删除函数DROP FUNCTION first_fn;


--创建包create or replace package first_packageisv_num number:=0;--定义全局变量、常量、游标、异常和数据类型function package_fn return number;--定义公共的存储过程或者函数子程序,在包体中定义其具体代码end first_package;--定义包体create or replace package body first_packageis  function package_fn return number is  v_sal emp.sal%type;  begin    select max(sal) into v_sal from emp;    return v_sal;  end package_fn;end first_package;--包的调用执行execute DBMS_OUTPUT.PUT_LINE('num in package is '||first_package.v_num);execute DBMS_OUTPUT.PUT_LINE('max salary is '||first_package.package_fn);--删除包和包体drop package first_package;drop package body first_package;

包中存在重载,规则和java中的重载规则类似
  相关解决方案