Oracle中的函数、存储过程、包

1.函数

①系统函数

②自定义函数

③使用函数

④编写过程

⑤过程的调用

例子:一个数的两倍

CREATE OR REPLACE FUNCTION f_get_double
(
p1 NUMBER
)
RETURN NUMBER
IS
v1 NUMBER;
BEGIN
v1:=p1*2;
RETURN v1;
END;

调用:SELECT scott.f_get_double(100) FROM dual;
SELECT ename,sal,f_get_double(sal) AS sal2 FROM emp;

2.存储过程

例子:删除指定编号的员工信息,如果员工所在部门的人数少于三个就不能删除。

CREATE OR REPLACE PROCEDURE sp_del
(
v_empno emp.empno%TYPE
)
AS
v_count NUMBER;
BEGIN
DELETE FROM emp WHERE empno=v_empno;
SELECT COUNT(*) INTO v_count FROM emp
WHERE deptno=(
SELECT deptno FROM emp WHERE empno=deptno
);
IF(v_count<3)THEN
ROLLBACK;
raise_application_error(-20045,'部门人数太少!');
END IF;
dbms_output.put_line('删除了'||SQL%ROWCOUNT||'行');
COMMIT;
END;

3.函数与存储过程的区别:

①函数必须有返回值

②函数不能修改数据

③都有in out (in out)三个参数



4.常见函数举例

①Ltrim与Rtrim

SELECT RTrim('afesafdafeg','eg') FROM dual; --这里就是把右边的eg截断
SELECT LTrim('afesafdafeg','af') FROM dual; --这里就是把左边的af截断

②LPad与RPad

SELECT LPad('abcdefgtyi', 12, 'YY') FROM dual; --在列的左边粘贴字符,12表示 在'abcdefgtyi'出现的索引值,不够就补YY

上面的结果为:YYabcdefgtyi


SELECT RPad('abcdefgyui', 12, 'YY') FROM dual; --同上

结果为:abcdefgyuiYY

5.包的使用(可以看成是JAVA里的接口)

--先写包里定义函数,不写它的实现

CREATE OR REPLACE PACKAGE my_fun IS
FUNCTION f_get_double(a NUMBER) RETURN NUMBER;
END;

--包体

CREATE OR REPLACE PACKAGE BODY my_fun IS
FUNCTION f_get_double(a NUMBER) RETURN NUMBER
AS
BEGIN
RETURN a*2;
END;
END;



6.什么时候函数与存储过程

①不修改数据,只完成计算。用函数

②业务要涉及多个步骤或者多张表时,用存储过程

③而项目中函数和过程多,就用包来管理
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值