`
121059457
  • 浏览: 23246 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

学习笔记:19pl/sql函数

阅读更多
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 name='GET_INFO';



































分享到:
评论

相关推荐

    pl/sql学习笔记

    以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...

    PL/SQL学习笔记

    PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...

    pl/sql数据库学习笔记

    PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...

    PL/SQL学习教程,附笔记

    PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...

    PL/SQL学习笔记4

    ### PL/SQL学习笔记4 —— 集合与成员函数 #### 一、PL/SQL 表(索引表) 在PL/SQL中,**索引表**(也称为**PL/SQL表**)是一种非常有用的结构,它类似于数组但具有更多的灵活性。这种表是非持久化的,即它们不会...

    PL/SQl超级笔记

    总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...

    PL/SQL听课笔记

    ### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...

    PL/SQL文本文档

    PL/SQL,全称为Procedural Language/Structured Query Language,是Oracle数据库的一种扩展,它将SQL(结构化查询语言)与过程式编程语言相结合,为数据库管理提供了强大的编程能力。以下是对PL/SQL的一些核心知识点...

    oracle笔记 (PL-SQL)

    Oracle笔记(PL-SQL)是关于数据库管理和编程的一个重要主题,主要聚焦于Oracle数据库系统中的结构化查询语言(SQL)的扩展——PL/SQL。PL/SQL是一种过程化语言,结合了SQL的功能,使得开发者能够编写复杂的数据库应用...

    PL/SQL学习笔记7

    在PL/SQL编程中,存储过程和函数是关键的组件,它们允许我们将可重用的代码逻辑存储在数据库中,以便于管理和调用。本文主要探讨了存储过程、函数以及程序包的概念,特点,创建方法,执行方式,权限管理以及参数处理...

    pl/sql学习小结笔记

    PL/SQL,全称Procedural Language/Structured Query Language,是Oracle数据库的一种扩展语言,用于处理数据库中的数据和实现复杂的业务逻辑。以下是对PL/SQL的基础知识进行的详细阐述: 1. **匿名块与命名块**: ...

    Oracle PL SQL Programming 第五版-带书签目录超清文字版

    Oracle PL/SQL编程是Oracle数据库开发中的核心技能之一,它是一种强大的过程式语言,用于在Oracle环境中编写存储过程、函数、触发器等数据库程序。第五版的《Oracle PL SQL Programming》是一本深入学习PL/SQL的权威...

    oracle/SQL和PL/SQL课堂笔记

    PL/SQL部分未在提供的内容中出现,但它是Oracle的扩展,允许编写存储过程、函数、触发器等,增强了SQL的功能。它结合了SQL查询与过程式编程语言,使数据库管理更加灵活和高效。 这些笔记提供了学习SQL和Oracle...

    PL/SQL存储过程笔记

    ### PL/SQL 存储过程知识点详解 #### 1. PL/SQL 存储过程概述 PL/SQL(Procedure Language for SQL)是...通过这些基本概念的学习,可以帮助开发者更好地掌握 PL/SQL 的使用技巧,提高数据库应用程序的效率和性能。

    plsql学习笔记整理.docx

    PL/SQL 学习笔记总结 PL/SQL 是 Oracle 在标准 SQL 语言上的扩展,提供了更多的编程功能,例如定义变量和常量、使用条件语句和循环语句、例外处理等。使用 PL/SQL 可以提高开发效率和数据库性能。 PL/SQL 的优点 ...

Global site tag (gtag.js) - Google Analytics