热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle中自定义函数无参数输入参数输出参数

--19-1:建立无参数的函数CREATEORREPLACEFUNCTIONcur_datetimeRETURNVARCHAR2ISBEGINRETURNTO_CHAR(sysdate,YYYY年MM月DD日HH24时MI分SS秒);END;--19-2:建立带有输入参数的函数CREATEORREPLACEFUNCTIONget_sal(nameVARCHAR2)RETURNNUMBERAS

-- 19-1:建立无参数的函数CREATE OR REPLACE FUNCTION cur_datetimeRETURN VARCHAR2ISBEGINRETURN TO_CHAR(sysdate,'YYYY年MM月DD日HH24时MI分SS秒');END;/-- 19-2:建立带有输入参数的函数CREATE OR REPLACE FUNCTION get_sal(name VARCHAR2)RETURN NUMBERAS

-- 19-1:建立无参数的函数 CREATE OR REPLACE FUNCTION cur_datetime RETURN VARCHAR2 IS BEGIN RETURN TO_CHAR(sysdate, 'YYYY"年"MM"月"DD"日"HH24″时"MI"分"SS"秒"'); END; / -- 19-2:建立带有输入参数的函数 CREATE OR REPLACE FUNCTION get_sal(name VARCHAR2) RETURN NUMBER AS v_sal emp.sal%TYPE; BEGIN SELECT sal INTO v_sal FROM emp WHERE upper(ename)=upper(name); RETURN v_sal; END; / -- 19-3:建立带有输出参数的函数 CREATE OR REPLACE FUNCTION get_info (eno NUMBER,title OUT VARCHAR2) RETURN VARCHAR2 AS name emp.ename%TYPE; BEGIN SELECT ename,job INTO name,title FROM emp WHERE empno=eno; RETURN name; END; / -- 19-4:建立带有输入输出参数的函数 CREATE OR REPLACE FUNCTION get_upd_info (eno NUMBER,sal_chg IN OUT NUMBER) RETURN VARCHAR2 AS name emp.ename%TYPE; BEGIN UPDATE emp SET sal=sal+sal_chg WHERE empno=eno RETURNING ename,sal INTO name,sal_chg; RETURN name; END; / -- 19-5:建立结果缓存函数 CREATE OR REPLACE FUNCTION get_name(no VARCHAR2) RETURN NUMBER RESULT_CACHE RELIES_ON(emp) AS v_name emp.ename%TYPE; BEGIN SELECT ename INTO v_name FROM emp WHERE empno=no; RETURN v_name; END; / -- 19-6:调用无参数的函数 BEGIN dbms_output.put_line(cur_datetime); END; / -- 19-7:调用带有输入参数的函数 BEGIN dbms_output.put_line('工资:'||get_sal('&name')); END; / -- 19-8:调用带有输出参数的函数 DECLARE v_name emp.ename%TYPE; v_job emp.job%TYPE; BEGIN v_name:=get_info(&eno,v_job); dbms_output.put_line('姓名:'||v_name||',岗位:'||v_job); END; / -- 19-9:调用带有输入输出参数的函数 DECLARE v_empno emp.empno%TYPE; v_name emp.ename%TYPE; v_salchg emp.sal%TYPE; BEGIN v_empno:=&eno; v_salchg:=&incre; v_name:=get_upd_info(v_empno,v_salchg); dbms_output.put_line('姓名:'||v_name||',新工资:'||v_salchg); END; / -- 19-10:使用位置传递为参数传递变量和数据 SELECT get_sal('&name') 工资 FROM dual; -- 19-11:使用名称传递为参数传递变量和数据 VAR salary NUMBER EXEC :salary:=get_sal(name=>'&name') -- 19-12:使用组合传递为参数传递变量和数据 VAR name VARCHAR2(10) VAR sal_chg NUMBER EXEC :sal_chg:=200 EXEC :name:=get_upd_info(&eno,:sal_chg) PRINT name sal_chg -- 19-13:在sql语句中调用pl/sql函数 SELECT get_sal(name=>'scott') salary FROM dual; -- 19-14:使用异常处理 CREATE OR REPLACE FUNCTION get_sal(name VARCHAR2) RETURN NUMBER AS v_sal emp.sal%TYPE; BEGIN SELECT sal INTO v_sal FROM emp WHERE upper(ename)=upper(name); RETURN v_sal; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20000,'该雇员不存在'); END; / -- 19-15:使用纪录类型作为返回类型 CREATE OR REPLACE FUNCTION get_info (eno NUMBER) RETURN emp%ROWTYPE IS emp_record emp%ROWTYPE; BEGIN SELECT * INTO emp_record FROM emp WHERE empno=eno; RETURN emp_record; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20000,'该雇员不存在'); END; / DECLARE emp_record emp%ROWTYPE; BEGIN emp_record:=get_info(&eno); dbms_output.put_line('姓名:'||emp_record.ename||',部门号:'||emp_record.deptno); END; / -- 19-16:使用集合类型作为返回类型 CREATE OR REPLACE TYPE ename_table_type IS TABLE OF VARCHAR2(10); / CREATE OR REPLACE FUNCTION get_name (dno NUMBER) RETURN ename_table_type IS ename_table ename_table_type; BEGIN SELECT ename BULK COLLECT INTO ename_table FROM emp WHERE deptno=dno; RETURN ename_table; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20099,'该部门不存在'); END; / DECLARE ename_table ename_table_type; BEGIN ename_table:=get_name(&dno); FOR i IN 1..ename_table.COUNT LOOP dbms_output.put_line('姓名:'||ename_table(i)); END LOOP; END; / -- 19-17:删除函数 DROP FUNCTION get_name; -- 19-18:显示编译错误 SHOW ERRORS -- 19-19:确定函数状态 SELECT object_name FROM user_objects WHERE status='INVALID' AND object_type='FUNCTION'; -- 19-20:编译函数 ALTER FUNCTION get_info COMPILE; -- 19-21:查看函数代码 SELECT text FROM user_source WHERE;


推荐阅读
  • Web安全入门:MySQL基础操作与SQL注入防范
    本文详细介绍了MySQL数据库的基础操作命令,包括数据库和表的基本管理,以及数据的增删查改等常用操作。同时,针对Web安全领域常见的SQL注入问题,提供了初步的理解和防范措施。 ... [详细]
  • 本文探讨了如何利用Oracle的REGEXP_SUBSTR函数高效地从复杂字符串中提取括号内的特定值,提供了详细的示例和解决方案。 ... [详细]
  • BME框架使用中的典型问题解析
    本文主要探讨了BME框架在实际应用中遇到的一些常见问题,包括查询条件为空、动态参数处理及分页查询等场景的解决方案。 ... [详细]
  • 本文探讨了Entity Framework 4(EF4)与SQL Server 2000之间的兼容性问题,并提供了官方反馈链接以供参考。 ... [详细]
  • databasesync适配openGauss使用指导书
    一、database-sync简介database-sync作为一种开源辅助工具,用于数据库之间的表同步,更确切的说法是复制,可以从一个数据库复制表到另一个数据库该工具支持的功能如 ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • ThinkPHP 文件缓存组件详解与应用
    本文深入探讨了ThinkPHP框架中的文件缓存类实现,提供了详细的代码示例和使用说明,旨在帮助开发者更好地理解和利用这一功能来优化应用程序性能。 ... [详细]
  • 本文档详细介绍了服务器与应用系统迁移的策略与实施步骤。迁移不仅涉及数据的转移,还包括环境配置、应用兼容性测试等多个方面,旨在确保迁移过程的顺利进行及迁移后的系统稳定运行。 ... [详细]
  • SonarQube配置与使用指南
    本文档详细介绍了SonarQube的配置方法及使用流程,包括环境准备、样本分析、数据库配置、项目属性文件解析以及插件安装等内容,适用于具有Linux基础操作能力的用户。 ... [详细]
  • 解决PHP与MySQL之间的编码不匹配问题
    探讨如何有效解决PHP与MySQL之间常见的编码问题,确保数据的正确传输与显示。 ... [详细]
  • 使用Docker部署Gitea自托管Git服务
    Gitea是由Gogs社区分叉而来的开源自托管Git服务,旨在提供一个更加灵活和易于维护的解决方案。本文将详细介绍如何利用Docker容器技术快速部署Gitea。 ... [详细]
  • Oracle 数据库提供了自动化文件管理(OFM)的功能,允许用户通过设置特定参数来简化数据文件和日志文件的创建过程。当配置了 db_create_file_dest 和 db_create_online_log_dest_n 参数后,系统能够自动处理文件的创建与删除。 ... [详细]
  • 本文档整理了公司内部常用的网站链接和重要资源路径,包括部门周报、内控报销系统、邮件服务等,同时提供了相关数据库的登录信息。 ... [详细]
  • 深入理解Hibernate延迟加载机制
    本文探讨了Hibernate框架中的延迟加载(懒加载)特性,分析其对程序性能的影响及实现原理,同时提供了具体的代码示例来说明如何配置和使用延迟加载。 ... [详细]
  • 1、服务器配置信息① 主服务器IP:192.168.1.2② 从服务器IP:192.168.1.3③ 操作系统:主服务器:Win8,从服务器࿱ ... [详细]
author-avatar
坚强萝卜_854
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有