基于oracle:存储过程和自定义函数例题

存储过程和函数的区别
1.返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有
2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用,函数一般情况下是用来计算并返回一个计算结果,存储过程一般是用来完成特定的数据操作 (比如修改、插入数据库表或执行某些DDL语句等等)
3.编译的区别:存储过程只需编译一次,调用的时候不需要再编译,函数每调用一次都需要重新编译

1.创建一个过程,能向dept表中添加一个新记录。(in参数)

CREATE OR REPLACE PROCEDURE sp_1(p_deptno dept.deptno%TYPE,
     p_dname dept.dname%TYPE,
     p_loc dept.loc%TYPE) IS
BEGIN     
INSERT INTO dept VALUES(p_deptno,p_dname,p_loc);   COMMIT;
END;
--调用
DECLARE 
v_deptno dept.deptno%TYPE:='&部门编号:';
v_dname dept.dname%TYPE:='&部门名称:';
v_loc  dept.loc%TYPE:='&部门位置:';BEGIN  sp_1(v_deptno,v_dname,v_loc);END;

2.从emp表中查询给定职工的职工姓名和工资。(提示:使用&来输入员工编号 要求:利用out模式的参数将值传给调用者)

CREATE OR REPLACE PROCEDURE sp_2(p_empno emp.empno%TYPE,
     p_ename OUT emp.ename%TYPE,
     p_sal OUT emp.sal%TYPE) IS
v_c NUMBER;
BEGIN     
SELECT COUNT(1) INTO v_c FROM emp WHERE empno=p_empno;   
IF v_c=0 THEN      dbms_output.put_line('没有这个员工编号!');    
else     
SELECT ename,sal INTO p_ename,p_sal FROM emp WHERE empno=p_empno;     dbms_output.put_line('员工姓名:'||RPAD(p_ename,10)||'员工工资:'||p_sal);   
END IF;
END;
--调用
DECLARE 
v_ename emp.ename%TYPE;
v_empno emp.empno%TYPE:='&员工编号:';
v_sal  emp.sal%TYPE;BEGIN  sp_2(v_empno,v_ename,v_sal);
END;

3.创建一个过程,在执行调用过程时,可随机输入emp表中某个雇员的姓名,根据雇员的姓名,返回该雇员的薪水值,并输出(out参数)

CREATE OR REPLACE PROCEDURE sp_3(p_ename emp.ename%TYPE,
     p_sal OUT emp.sal%TYPE) IS
v_c NUMBER;
BEGIN     
SELECT COUNT(1) INTO v_c FROM emp WHERE ename=p_ename;   
IF v_c=0 THEN    
dbms_output.put_line('没有这个雇员的姓名!');    
else        
SELECT sal INTO p_sal FROM emp WHERE ename=p_ename;       dbms_output.put_line('雇员的薪水:'||
  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值