oracle函数创建及调用

创建函数的语法如下:

CREATE [OR REPLACE] FUNCTION function_name
[ (argment [ { IN | OUT | IN OUT } ] Type ,
argment [ { IN | OUT | IN OUT } ] Type ]
RETURN return_type
{ IS | AS }
<类型.变量的说明>
BEGIN
FUNCTION_body
EXCEPTION
其它语句
END;

例:

 1 CREATE OR REPLACE FUNCTION get_salary(
 2   Dept_no NUMBER, Emp_count OUT NUMBER)
 3   RETURN NUMBER
 4   IS
 5   V_sum NUMBER;
 6 BEGIN
 7   SELECT SUM(sal), count(*) INTO V_sum, emp_count
 8   FROM emp WHERE deptno=dept_no;
 9   RETURN v_sum;
10   EXCEPTION
11     WHEN NO_DATA_FOUND THEN
12     DBMS_OUTPUT.PUT_LINE(‘你需要的数据不存在!‘);
13     WHEN OTHERS THEN
14     DBMS_OUTPUT.PUT_LINE(SQLCODE||‘---‘||SQLERRM);
15 END get_salary;

调用函数方法
函数声明时所定义的参数称为形式参数,应用程序调用时为函数传递的参数称为实际参数。应用程序在调用函数时,可以使用以下三种方法向函数传递参数:

第一种参数传递格式称为位置表示法,格式为:
例:

1 DECLARE
2   V_num NUMBER;
3   V_sum NUMBER;
4 BEGIN
5   V_sum :=get_salary(30, v_num);
6   DBMS_OUTPUT.PUT_LINE(‘30号部门工资总和:‘||v_sum||‘,人数:‘||v_num);
7 END;

第二种参数传递格式称为名称表示法,格式为 :
例:

1 DECLARE
2   V_num NUMBER;
3   V_sum NUMBER;
4 BEGIN
5   V_sum :=get_salary(emp_count => v_num, dept_no => 30);
6   DBMS_OUTPUT.PUT_LINE(‘30号部门工资总和:‘||v_sum||‘,人数:‘||v_num);
7 END;

第三种参数传递格式称为混合表示法 :
例:

 1 DECLARE
 2   Var VARCHAR2(32);
 3 BEGIN
 4   Var := demo_fun(‘user1‘, 30, sex => ‘男‘);
 5   DBMS_OUTPUT.PUT_LINE(var);
 6   Var := demo_fun(‘user2‘, age => 40, sex => ‘男‘);
 7   DBMS_OUTPUT.PUT_LINE(var);
 8   Var := demo_fun(‘user3‘, sex => ‘女‘, age => 20);
 9   DBMS_OUTPUT.PUT_LINE(var);
10 END;

参数默认值
在CREATE OR REPLACE FUNCTION 语句中声明函数参数时可以使用DEFAULT关键字为输入参数指定默认值。
例:

 1 CREATE OR REPLACE FUNCTION demo_fun(
 2   Name VARCHAR2,vAge INTEGER,
 3   Sex VARCHAR2 DEFAULT ‘男‘)
 4   RETURN VARCHAR2
 5 IS
 6   V_var VARCHAR2(32);
 7 BEGIN
 8   V_var := name||‘:‘||TO_CHAR(age)||‘岁,‘||sex;
 9   RETURN v_var;
10 END; 

具有默认值的函数创建后,在函数调用时,如果没有为具有默认值的参数提供实际参数值,函数将使用该参数的默认值。
但当调用者为默认参数提供实际参数时,函数将使用实际参数值。
在创建函数时,只能为输入参数设置默认值,而不能为输入/输出参数设置默认值。
例:

 1 DECLARE
 2   Var VARCHAR(32);
 3 BEGIN
 4   Var := demo_fun(‘user1‘, 30);
 5   DBMS_OUTPUT.PUT_LINE(var);
 6   Var := demo_fun(‘user2‘, age => 40);
 7   DBMS_OUTPUT.PUT_LINE(var);
 8   Var := demo_fun(‘user3‘, sex => ‘女‘, age => 20);
 9   DBMS_OUTPUT.PUT_LINE(var);
10 END;

可以使用DROP语句删除函数:
DROP FUNCTION function_name;

授权执行权给相关的用户或角色
GRANT语法:
GRANT system_privilege | role
TO user | role | PUBLIC [WITH ADMIN OPTION]

GRANT object_privilege | ALL ON schema.object
TO user | role | PUBLIC [WITH GRANT OPTION]
例:

GRANT EXECUTE ON dbms_job TO PUBLIC WITH GRANT OPTION

与过程相关的权限:
CREATE ANY PROCEDURE
DROP ANY PROCEDURE

与过程相关数据字典
USER_SOURCE ,USER_PROCEDURES ,USER_ERRORS

时间: 2024-10-11 13:39:07

oracle函数创建及调用的相关文章

oracle函数创建与调用

函数的定义: CREATE OR REPLACE FUNCTION FUNCTION_TEST(PARAMER1 IN VARCHAR, -- 参数的类型不写长度 PARAMER2 OUT VARCHAR, PARAMER3 IN VARCHAR) RETURN VARCHAR -- 函数要写返回值AS -- 表示函数体的开始 PARAMER4 VARCHAR(40); -- 定义内部参数 PARAMER5 VARCHAR(40); BEGIN PARAMER4 := CONCAT(PARAME

Js函数的概念、作用、创建、调用!

一.函数是用来帮助我们封装.调用代码的最方便的工具! 二.函数的创建方法有三种: 三.函数的创建方式有3种,调用方式也不是单一的,调用方式有4种!      1.作为一个函数去调用 函数名+();(函数作为全局对象调用,会使this的值成为全局对象,使用window对象作为一个变量,容易造成程序崩溃!)       2.函数作为方法调用:(函数作为对象的方法调用,会使this的值成为对象的本身!)      我们举例说明: 3.使用构造函数调用函数:(构造函数中的this没有任何值) 4.作为函

java调用oracle函数

今天写了个oracle函数,但但对java如何调用不是很明白. 今天写了个,并且成功运行了. Connection conn = null; CallableStatement cstmt = null; try { conn = this.getJdbcTemplate().getDataSource().getConnection(); cstmt = conn.prepareCall("{call AUTO_TENDER_NVL(?)}"); cstmt.registerOutP

如何在sqlite3连接中创建并调用自定义函数

#!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sqlite3连接中创建并调用自定义函数''' import sqlite3,hashlib #自定义函数 def md5sum(t): return hashlib.md5(t).hexdigest() #在内存中创建临时数据库 conn = sqlite3.connect(":memory:"

【PLSQL】Oracle函数与索引

本篇主要内容如下: 6.1 引言 6.2 创建函数 6.3 存储过程 6.3.1创建过程 6.3.2调用存储过程 6.3.3 AUTHID 6.3.4 PRAGMA AUTONOMOUS_TRANSACTION 6.3.5开发存储过程步骤 6.3.6删除过程和函数 6.3.7过程与函数的比较 6.1 引言 过程与函数(另外还有包与触发器)是命名的PL/SQL块(也是用户的方案对象),被编译后存储在数据库中,以备执行.因此,其它PL/SQL块可以按名称来使用他们.所以,可以将商业逻辑.企业规则写成

浅谈Oracle函数返回Table集合

在调用Oracle函数时为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合在可以返回前,必须进行具体化. 9i 通过引入Oracle函数中的管道化表函数纠正了后一种情况.表函数是返回整个行的集(通常作为一个集合)的函数,可以直接从 SQL 语句中进行查询,就好像它是一个真正的数据库表一样.管道化表函数与之相似,但是它像在构建时一样返回数据,而不是一次全部返回.管道化表函数

MySQL之存储过程创建和调用

一.MySQL存储过程_创建-调用 1.1存储过程:SQL中的"脚本"1.创建存储过程2.调用存储过程3.存储过程体4.语句标签块 二.MySQL存储过程简单介绍: 存储过程(Stored Procedure):提示:#SQL语句:先编译后执行 一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行. 优点(为什么要用存储过程?): ①将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调

oracle存储过程创建语法及常见异常

oracle存储过程创建语法及常见异常: oracle存储过程语法: CREATE[ORReplace]PROCEDURE[schema.]procedure_name [(argument[{IN|OUT|INOUT}]datatype, ... argument[{IN|OUT|INOUT}]datatype)] {IS|AS} [descriptionpart说明部分] BEGIN SQLSTATEMENT语句序列 [EXCEPTION例外处理] END[procedureName过程名]

Qt DLL总结【二】-创建及调用QT的 DLL(三篇)good

目录 Qt DLL总结[一]-链接库预备知识 Qt DLL总结[二]-创建及调用QT的 DLL Qt DLL总结[三]-VS2008+Qt 使用QPluginLoader访问DLL 开发环境:VS2008+Qt4.7.4 最近看了不少Qt的DLL例子,总结一下如何创建和调用QT 动态链接库. 先讲一下对QT动态链接库的调用方法,主要包括: 1.显式链接DLL,调用DLL的全局函数,采用Qt的QLibrary方法 2.显示链接DLL,调用DLL中类对象.成员函数.(通过对象即可实现类成员函数的调用