PLSQL函数


1.PLSQL 函数
在PLSQL中 函数通常与存储过程共同作用,以减少重复工作耗费的精力和时间
而函数本身提升了程序的运行效率
函数本身分为单行函数和组函数
除了第一阶段在Oracle里学到的数值函数、日期函数、字符函数外
在PLSQL中可以自定义函数 比如在游标中的B2C布尔函数 有效的让我们认识到了三种参数的使用

函数在数学中通常是指可以一对一,多对一,但是不能一对多的表达式
在PLSQL中函数作为一个具有返回值和可接受参数的程序体
就已经为函数做好了要求和规范

2.参数分类
2.1无参

CREATE OR REPLACE FUNCTION FUNC_NAME(PARAMETERS PARAM_TYPES) RETURN DATA_TYPE
--其中 PARAMETERS_TYPES 和 DATA_TYPE 都表示数据类型
--可以是基本数据类型、PLSQL数据类型(行类型,引用类型)、游标 、table类型
IS

BEGIN
  
END;

函数的调用也是两种
第一种是SELECT DUAL 调用
第二种是在PLSQL块中调用


--实例:编写一个函数

CREATE OR REPLACE FUNCTION FUNC_FIRST RETURN VARCHAR2 IS
V_STR VARCHAR2(10);
BEGIN
  V_STR:=&STR;
  RETURN V_STR;
END;--函数必须返回值 如果不返回值 会出警告:函数没有返回值

SELECT FUNC_FIRST FROM DUAL;

DECLARE
V_STR VARCHAR2(10);

BEGIN
  V_STR:=FUNC_FIRST;
  DBMS_OUTPUT.PUT_LINE(V_STR);--同时必须有接受值
END;

2.2有参有参依然分为 IN、OUT 和 IN OUT
--根据部门编号查询员工信息
2.2.1变量尝试

CREATE OR REPLACE FUNCTION FUN_EMP(V_DEPTNO NUMBER) RETURN EMP%ROWTYPE IS
V_EMP EMP%ROWTYPE;
BEGIN
  
  SELECT * INTO V_EMP FROM EMP WHERE DEPTNO=V_DEPTNO;
 
  RETURN V_EMP;
END;

DECLARE
V_EMP EMP%ROWTYPE;
BEGIN
V_EMP:=FUN_EMP(10); 
DBMS_OUTPUT.PUT_LINE(V_EMP.ENAME);--如果想要变量传递信息 则会报错:实际返回的行数超出请求行数 
END;--所以只能用游标来操作

2.2.2游标尝试

--存储过程怎么
CREATE OR REPLACE PROCEDURE SP_1(V_DEPTNO NUMBER) IS
CUR SYS_REFCURSOR;
V_EMP EMP%ROWTYPE;
BEGIN
  OPEN CUR FOR SELECT *  FROM EMP WHERE DEPTNO=V_DEPTNO;
  LOOP
    EXIT WHEN CUR%NOTFOUND;
    FETCH CUR INTO V_EMP;
    IF CUR%NOTFOUND=FALSE THEN
    DBMS_OUTPUT.PUT_LINE(V_EMP.EMPNO);
    END IF;
  END LOOP;
  CLOSE CUR;
END;
DECLARE

BEGIN
  SP_1(10);
END;

--函数怎么
CREATE OR REPLACE FUNCTION FUN_1(V_DEPTNO NUMBER) RETURN SYS_REFCURSOR IS
CUR SYS_REFCURSOR;
V_EMP EMP%ROWTYPE;
BEGIN
  OPEN CUR FOR SELECT *  FROM EMP WHERE DEPTNO=V_DEPTNO;
  LOOP
    EXIT WHEN CUR%NOTFOUND;
    FETCH CUR INTO V_EMP;
    IF CUR%NOTFOUND=FALSE THEN
     DBMS_OUTPUT.PUT_LINE(V_EMP.EMPNO);
    END IF;
  END LOOP;
  CLOSE CUR;
  RETURN CUR;
END;

DECLARE
CUR SYS_REFCURSOR;
BEGIN 
  CUR:=FUN_1(10);--返回游标 所以赋值给游标 又因为函数已经打印过了 所以只调用
  --也许是不规范的存储过程
  --这个游标不能打开 在函数内部打开
END;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值