oracle子过程,Oracle学习--子过程篇

本文介绍了Oracle数据库中创建和执行子程序来操作数据的基本示例,包括带参数的子过程,用于获取员工信息、插入新记录、更新员工详情以及删除员工数据。通过这些例子,读者可以理解如何在Oracle环境中进行数据操作。
摘要由CSDN通过智能技术生成

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;

2带输入参数的子过程

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

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

IS

empnameemployee1.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 OUTEmployee1.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;

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

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;

4。插入一条数据:

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

IS

numINTEGER;

exists_empEXCEPTION;

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;

5。修改数据

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

IS

numINTEGER;

no_exists_empEXCEPTION;

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;

6删除数据

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

IS

numINTEGER;

no_exists_empEXCEPTION;

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、付费专栏及课程。

余额充值