Oracle 简单过程与函数的创建 以及二者区别

--创建过程

  --语法形式如下

   CREATE [OR REPLACE] PROCEDURE pname

   [ (param1 [mode1]        type1,

      param2 [mode2]        type2,

      …)]

   IS | AS

   [variable1    type3 :=0;

    variable2    type4 :=0;]

   BEGIN   PL/SQL Block

   END [pname];


  --OR REPLACE:表示如果同名对象已经存在就覆盖

  --pname:过程名称

  --param1param2:形参名称

 --mode1mode2:参数模式,包括IN(输入参数 默认)、OUT(输出参数)、IN OUT(既是输入又是输出)

  --type1type2type3type4:参数数据类型

  --variable1variable2:局部变量

  --PL/SQL BlockPL/SQL代码块

--例:假设现在要创建这样的过程,实现的功能是要给指定的(通过雇员编号指定)雇员加薪,如果雇员编号在7500以内加薪10%,雇员编号大于等于7500则加薪15%,创建存储过程的SQL语句如下:

CREATE OR REPLACE PROCEDURE raise_salary

  (p_id IN emp.empno%TYPE)

IS

BEGIN

  IF p_id >= 7500 THEN

    BEGIN

      UPDATE emp

      SET sal = sal * 1.15

      WHERE empno = p_id;

    END;

  END IF;

  IF p_id < 7500 THEN

    BEGIN

      UPDATE emp

      SET sal = sal * 1.10

      WHERE empno = p_id;

    END;

  END IF;

END raise_salary;

--注意:

  --1.endend if end 过程名 后一定要加;

  --2.if里面的begin end 可以省略

  --3.update执行语句后加;

  --4.emp.empno%TYPE 表示与emp表里的empno列数据类型相同

--整理后

CREATE OR REPLACE PROCEDURE raise_salary

  (p_id IN number)

IS

BEGIN

  IF p_id >= 7500 THEN

      UPDATE emp

      SET sal = sal * 1.15

      WHERE empno = p_id;

  else

      UPDATE emp

      SET sal = sal * 1.10

      WHERE empno = p_id;

  END IF;

END raise_salary;

--调用过程

  --通过PL/SQL Dev查看Procedures文件夹,右键点击raise_salary过程,选择“Test”,在弹出的窗口中对应p_id这个形参输入实参然后选中弹出窗口中的代码进行执行即可

 

---------------------------------------------------------------------------

 

--创建函数

  --创建函数的语法形式如下

CREATE [OR REPLACE] FUNCTION fname

 [ (param1        [mode1]        type1,

    param2        [mode2]        type2,

      …)]

RETURN type     //这一行后不能加;

IS | AS

        [variable1    type3 :=0;

         variable2    type4 :=0;]

BEGIN

PL/SQL Block

END [fname]

--注意:

  --1.endend if end 过程名 后一定要加;

 

--例1假设要创建一个通过员工号获取上级管理者编号的函数,其SQL语句如下

CREATE OR REPLACE FUNCTION get_mgr_id

  (p_id IN number)

  RETURN NUMBER

IS

  v_mgr_id number :=0;

BEGIN

  SELECT mgr INTO v_mgr_id

  FROM emp WHERE empno = p_id;

  RETURN v_mgr_id;

END get_mgr_id;


--例2:函数功能:判断一个数是否能整除另一个数,可以返回1,不可以返回0

CREATE OR REPLACE FUNCTION division
  (divisor IN number,
     dividend IN number)
  RETURN NUMBER
IS
BEGIN
  IF mod(divisor,dividend)=0 then
     RETURN 1;
    ELSE
       RETURN 0;
    END IF;
END division;


----------------------------------------------------------------------------------------------------------------------------

--函数与过程的区别

  --1.函数多用于计算,过程用于执行特定的任务

  --2.函数声明为FUNCTION,过程声明为PROCEDURE

  --3.函数需要描述返回类型,并且PL/SQL语句块中至少有一个有效的RETURN语句;过程无返回值,可通过输出参数返回多个值

  --4.函数不能独立运行,过程可作为一个独立的PL/SQL语句运行

  --5.DMLDQL中可以调用函数,但不能调用过程

猜你喜欢

转载自blog.csdn.net/qq_40899182/article/details/80699618