Oracle学习--子过程篇

一,前期准备

 1. 创建员工表:

   Create  table Employee(EmpID char(2) primary key,

                                                 EmpName varchar2(8) not null,

                                                 Sex char(2) default '' not null,

                                                 NativePlace varchar2(50)

                                             );

员工表数据:

INSERT INTO EMPLOYEE( EMPID, EMPNAME, SEX, NATIVEPLACE ) VALUES (

'01', '张华', '', '山西');

INSERT INTO EMPLOYEE ( EMPID, EMPNAME, SEX, NATIVEPLACE ) VALUES (

'02', '高卫栋', '', '河北省');

INSERT INTO EMPLOYEE ( EMPID, EMPNAME, SEX, NATIVEPLACE ) VALUES (

'03', '沈富龙', '', '河南省');

COMMIT;

创建工资表:

CREATE TABLE SALARY

(

  EMPID        CHAR(2 BYTE)                     NOT NULL,

  BASICSALARY  NUMBER,

  OTHERSALARY  NUMBER

)

INSERT INTO SALARY ( EMPID, BASICSALARY, OTHERSALARY ) VALUES (

'01', 1000, 0);

INSERT INTO SALARY ( EMPID, BASICSALARY, OTHERSALARY ) VALUES (

'02', 2000, 50);

INSERT INTO SALARY ( EMPID, BASICSALARY, OTHERSALARY ) VALUES (

'03', 3000, 500);

 二。 子过程

功能描述:将编号为02员工的姓名存储到变量中,再打印出来。

CREATE OR REPLACE PROCEDURE ShowEmpinfor IS

  empName varchar2(20);--EmpName Employee.EmpName%Type;

  BEGIN

     SELECT EmpName INTO EmpName From Employee1 where empid='02';

     DBMS_OUTPUT.PUT_LINE('员工姓名:'||EmpName);

  END ShowEmpinfor;

带输入参数的子过程

 功能描述:通过编号获取员工姓名。

  CREATE OR REPLACE PROCEDURE showempinfor(ID Employee1.EmpID%Type)

 IS

   empname   employee1.empname%TYPE;

 BEGIN

    SELECT empname

     INTO empname

     FROM employee1

    WHERE empid = ID;

 

   DBMS_OUTPUT.put_line ('员工姓名:' || empname);

 END showempinfor;

/

 执行:

 DECLARE

  ID CHAR(2);

BEGIN

  ID := '01';

  SYSTEM.SHOWEMPINFOR ( ID );

  COMMIT;

END;

2。带输入,输出参数的子过程

功能描述:通过编号获取员工姓名。其中姓名为输出参数。

 CREATE OR REPLACE PROCEDURE showempinfor(ID Employee1.EmpID%Type,Name OUT   Employee1.EmpName%Type)

IS

BEGIN

   SELECT empname

     INTO Name

     FROM employee1

    WHERE empid = ID;

END showempinfor;

/

 执行:

 DECLARE

  ID CHAR(2);

  NAME VARCHAR2(8);

BEGIN

  ID := '01';

  NAME := NULL;

 

  SYSTEM.SHOWEMPINFOR ( ID, NAME );

 

  DBMS_OUTPUT.Put_Line('NAME = ' || NAME);

 

  COMMIT;

END;

 

带输入,输出,输入输出参数的子过程

  CREATE OR REPLACE PROCEDURE SYSTEM.showempinfor(ID Employee1.EmpID%Type,Name out Employee1.empname%type,sex in out employee1.sex%type)

IS

BEGIN

   SELECT empname

     INTO name

     FROM employee1

    WHERE empid = ID;

  SELECT sex

     INTO sex

     FROM employee1

    WHERE empid = ID;

END showempinfor;

/

执行:

 DECLARE

  ID CHAR(2);

  NAME VARCHAR2(8);

  SEX CHAR(2);

 

BEGIN

  ID := '01';

  NAME := NULL;

  SEX := NULL;

 

  SYSTEM.SHOWEMPINFOR ( ID, NAME, SEX );

 

  DBMS_OUTPUT.Put_Line('NAME = ' || NAME);

  DBMS_OUTPUT.Put_Line('SEX = ' || SEX);

 

  COMMIT;

end;

 

。插入一条数据:

 CREATE OR REPLACE PROCEDURE SYSTEM.insertemployee (emprow employee1%ROWTYPE)

IS

   num         INTEGER;

   exists_emp   EXCEPTION;

BEGIN

   SELECT COUNT (*)

     INTO num

     FROM employee1

    WHERE empid = emprow.empid;

 

   IF num > 0

   THEN

      RAISE exists_emp;

   ELSE

      INSERT INTO employee1

           VALUES (emprow.empid, emprow.empname, emprow.sex,

                   emprow.nativeplace);

 

      COMMIT;

      DBMS_OUTPUT.put_line ('编号为'||EMPROW.EMPID||'的员工已添加成功!');

   END IF;

EXCEPTION

   WHEN exists_emp

   THEN

      DBMS_OUTPUT.put_line ('编号为' || emprow.empid || '的员工已经存在!');

   WHEN OTHERS

   THEN

      DBMS_OUTPUT.put_line ('出现未知错误!');

END insertemployee;

/

执行:

 DECLARE

  EMPROW Employee1%rowtype;

 

BEGIN

  EMPROW.EMPID:='12';

  EMPROW.EMPNAME:='付涛';

  EMPROW.SEX :='';

  EMPROW.NATIVEPLACE :='山西省';

  SYSTEM.INSERTEMPLOYEE ( EMPROW );

  COMMIT;

END;

。修改数据

CREATE OR REPLACE PROCEDURE SYSTEM.updateemployee (emprow employee1%ROWTYPE)

IS

   num             INTEGER;

   no_exists_emp   EXCEPTION;

BEGIN

   SELECT COUNT (*)

     INTO num

     FROM employee1

    WHERE empid = emprow.empid;

 

   IF num = 0

   THEN

      RAISE no_exists_emp;

   ELSE

      UPDATE employee1

         SET empname = emprow.empname,

             sex = emprow.sex,

             nativeplace = emprow.nativeplace

       WHERE empid = emprow.empid;

 

      COMMIT;

      DBMS_OUTPUT.put_line ('修改成功!');

   END IF;

EXCEPTION

   WHEN no_exists_emp

   THEN

      DBMS_OUTPUT.put_line ('编号为' || emprow.empid

                            || '的员工不存在,修改失败!'

                           );

   WHEN OTHERS

   THEN

      DBMS_OUTPUT.put_line ('出现未知错误!修改失败');

END updateemployee;

/

 

执行:

DECLARE

  EMPROW Employee1%rowtype;

 

BEGIN

  EMPROW.EMPID:='14';

  EMPROW.EMPNAME:='付涛';

  EMPROW.SEX :='';

  EMPROW.NATIVEPLACE :='山西省';

  SYSTEM.UPDATEEMPLOYEE ( EMPROW );

  COMMIT;

END;

删除数据

CREATE OR REPLACE PROCEDURE SYSTEM.deleteemployee (emprow employee1%ROWTYPE)

IS

   num             INTEGER;

   no_exists_emp   EXCEPTION;

BEGIN

   SELECT COUNT (*)

     INTO num

     FROM employee1

    WHERE empid = emprow.empid;

 

   IF num = 0

   THEN

      RAISE no_exists_emp;

   ELSE

      DELETE FROM employee1

            WHERE empid = emprow.empid;

 

      COMMIT;

      DBMS_OUTPUT.put_line ('删除成功!');

   END IF;

EXCEPTION

   WHEN no_exists_emp

   THEN

      DBMS_OUTPUT.put_line (   '编号为'

                            || emprow.empid

                            || '的员工不存在,删除失败!'

                           );

   WHEN OTHERS

   THEN

      DBMS_OUTPUT.put_line ('未知错误,删除失败!');

END deleteemployee;

/

执行删除:

DECLARE

  EMPROW Employee1%rowtype;

 

BEGIN

  EMPROW.EMPID:='14';

  EMPROW.EMPNAME:='付涛';

  EMPROW.SEX :='';

  EMPROW.NATIVEPLACE :='山西省';

  SYSTEM.DELETEEMPLOYEE(EMPROW);

  COMMIT;

END;

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值