oracle 函数的用法(三)

-- 函数

1.oracle自带的标准函数 to_date,to_number
2.自定义函数

-- 自定义函数语法

1 CREATE OR REPLACE FUNCTION FUNCTION_name
2 [ (PARAMETERS [MODEL] datatype ... ) ]
3 RETURN datatype IS|AS
4 [local_variable_declarations ; ...]
5 BEGIN
6 -- action;
7 RETURN expression;
8 END [function_name];

-- 建立第一个函数 获取给定员工id的薪水

 1 CREATE OR REPLACE FUNCTION get_sal
 2 (
 3 ID employees.employee_id%Type
 4 )
 5 RETURN NUMBER IS
 6 sal employees.salary%TYPE := 0;
 7 BEGIN
 8 SELECT salary INTO sal FROM employees WHERE employee_id = ID;
 9 RETURN sal;
10 END get_sal; 

-- 执行方式

 1 -- 全局变量的方式执行
 2 VARIABLE salary NUMBER
 3 EXECUTE :salary := get_sal(100);
 4 -- 本地块的方式执行
 5 DECLARE sal employees.salary%TYPE;
 6 BEGIN
 7 sal := get_sal(100);
 8 END;
 9 --命令行执行
10 execute dbms_output.put_line(get_sal(100));
11 -- SQL语句执行
12 SELECT get_sal(100) FROM dual;

-- 函数在SQL语句中的使用 类似于avg count 等函数

1 CREATE OR REPLACE FUNCTION tax(VALUE IN NUMBER)
2 RETURN NUMBER IS
3 BEGIN
4 RETURN (VALUE * 0.08);
5 END;
6
7 SELECT tax(100) FROM dual;

函数的限制 : 只接收in 类型的参数

-- 函数会犯的错误

 1 CREATE OR REPLACE FUNCTION dml_call_sql
 2 (
 3 sal NUMBER
 4 )
 5 RETURN NUMBER IS
 6 BEGIN
 7 INSERT INTO employees
 8 (employee_id,last_name,email,hire_date,job_id,salary)
 9 VALUES
10 (1,‘forst‘,‘[email protected]‘,SYSDATE,‘sa_man‘,sal);
11 RETURN (sal + 100);
12 END;
13
14 UPDATE employees SET salary = dml_call_sql(2000) WHERE employee_id = 170;

报错 : update,insert中不能调用 有insert 的函数

-- 删除一个函数

1 drop function function_name

-- function 的数据字典

1 SELECT text FROM user_source WHERE TYPE=‘FUNCTION‘ ORDER BY line; -- 显示函数内容

2 SELECT object_name FROM user_objects WHERE object_type=‘FUNCTION‘; -- 显示函数

-- user_objects对象的结构 

 1 SQL> desc user_objects;
 2 Name           Type          Nullable Default Comments
 3 -------------- ------------- -------- ------- ----------------------------------------------------------------------------
 4 OBJECT_NAME    VARCHAR2(128) Y                Name of the object
 5 SUBOBJECT_NAME VARCHAR2(30)  Y                Name of the sub-object (for example, partititon)
 6 OBJECT_ID      NUMBER        Y                Object number of the object
 7 DATA_OBJECT_ID NUMBER        Y                Object number of the segment which contains the object
 8 OBJECT_TYPE    VARCHAR2(19)  Y                Type of the object      -- 类型 function, procedure  等
 9 CREATED        DATE          Y                Timestamp for the creation of the object
10 LAST_DDL_TIME  DATE          Y                Timestamp for the last DDL change (including GRANT and REVOKE) to the object
11 TIMESTAMP      VARCHAR2(19)  Y                Timestamp for the specification of the object
12 STATUS         VARCHAR2(7)   Y                Status of the object    -- 无效状态的在数据库巡检时抓出来 重新编译
13 TEMPORARY      VARCHAR2(1)   Y                Can the current session only see data that it place in this object itself?
14 GENERATED      VARCHAR2(1)   Y                Was the name of this object system generated?
15 SECONDARY      VARCHAR2(1)   Y                Is this a secondary object created as part of icreate for domain indexes?
16 NAMESPACE      NUMBER        Y                Namespace for the object
17 EDITION_NAME   VARCHAR2(30)  Y                Name of the edition in which the object is actual                            

-- 无效对象重新编译脚本  【扩展知识】

D:\oracle11g\app\Administrator\product\11.2.0\dbhome_1\RDBMS\ADMIN

utlrp.sql脚本文件 

函数和存储过程的异同

时间: 2024-08-06 13:57:34

oracle 函数的用法(三)的相关文章

Oracle to_date()函数的用法《转载》

to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明, 原文地址:http://database.51cto.com/art/201010/231193.htm 在Oracle数据库中,Oracle to_date()函数是我们经常使用的函数,下面就为您详细介绍Oracle to_date()函数的用法,希望可以对您有所启迪. to_date()与24小时制表示法及mm分钟的显示: 一.在使用Oracle的to_date

Oracle to_date()函数的用法介绍

to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,需要的朋友可以参考下 在Oracle数据库中,Oracle to_date()函数是我们经常使用的函数,下面就为您详细介绍Oracle to_date()函数的用法,希望可以对您有所启迪. to_date()与24小时制表示法及mm分钟的显示: 一.在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用"yyyy-MM-dd HH:m

Oracle常用函数TO_CHAR用法详解(转自博客园-小小草博文)

The following are number examples for the to_char function. to_char(1210.73, '9999.9') would return '1210.7' to_char(1210.73, '9,999.99') would return '1,210.73' to_char(1210.73, '$9,999.00') would return '$1,210.73' to_char(21, '000099') would retur

Oracle to_date()函数的用法

Oracle to_date()函数的用法 to_date()是Oracle数据库函数的代表函数之一,下文对Oracle to_date()函数的几种用法作了详细的介绍说明,供您参考学习. 在Oracle数据库中,Oracle to_date()函数是我们经常使用的函数,下面就为您详细介绍Oracle to_date()函数的用法,希望可以对您有所启迪. to_date()与24小时制表示法及mm分钟的显示: 一.在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接

【转】oracle的substr函数的用法

[转]oracle的substr函数的用法 oracle的substr函数的用法 取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] ) 如:     substr('This is a test', 6, 2)     would return 'is'     substr('This is a test', 6)     would return 'is a test'     substr('TechOnThe

Oracle常用函数及其用法

01.入门Oracle 本章目标: 掌握oracle安装.启动和关闭 基本管理以及常用工具 简单备份和恢复 熟练使用sql,掌握oracle常用对象 掌握数据库设计和优化基本方法 http://jingyan.baidu.com/article/5d6edee228308899eadeec3f.html oracle数据库:一系列物理文件的集合 一个实例是对应一个数据库,但是在12c中(c代表云)RAC集群,可以多个实例对应一个数据库 03.SQL编程 1.oracle中between and

Oracle trunc()函数的用法

--Oracle trunc()函数的用法 /**************日期  TRUNC()函数没有秒的精确 ********************/ select sysdate from dual --当时日期 select trunc(sysdate) from dual select trunc(sysdate ,'DD') from dual --今天日期 select trunc(sysdate,'d')+7 from dual --本周星期日 select trunc(sys

oracle管道函数的用法

oracle管道函数是一类特殊的函数,oracle管道函数返回值类型必须为集合,下面将介绍oracle管道函数的语法. 在普通的函数中,使用dbms_output输出的信息,需要在服务器执行完整个函数后一次性的返回给客户端.如果需要在客户端实时的输出函数执行过程中的一些信息,在oracle9i以后可以使用管道函数(pipeline function). 关键字PIPELINED表明这是一个oracle管道函数,oracle管道函数的返回值类型必须为集合,在函数中,PIPE ROW语句被用来返回该

[转]Oracle trunc()函数的用法

原文地址:http://www.cnblogs.com/gengaixue/archive/2012/11/21/2781037.html 1.TRUNC(for dates) TRUNC函数为指定元素而截去的日期值. 其具体的语法格式如下: TRUNC(date[,fmt]) 其中: date 一个日期值 fmt 日期格式,该日期将由指定的元素格式所截去.忽略它则由最近的日期截去 下面是该函数的使用情况: TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mo