oracle创建函数灭有输入和输出函数,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;

例:

CREATE OR REPLACE FUNCTION get_salary(

Dept_no NUMBER, Emp_count OUT NUMBER)

RETURN NUMBER

IS

V_sum NUMBER;

BEGIN

SELECT SUM(sal), count(*) INTO V_sum, emp_count

FROM emp WHERE deptno=dept_no;

RETURN v_sum;

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');

WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);

END get_salary;

调用函数方法

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

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

例:

DECLARE

V_num NUMBER;

V_sum NUMBER;

BEGIN

V_sum :=get_salary(30, v_num);

DBMS_OUTPUT.PUT_LINE('30号部门工资总和:'||v_sum||',人数:'||v_num);

END;

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

例:

DECLARE

V_num NUMBER;

V_sum NUMBER;

BEGIN

V_sum :=get_salary(emp_count => v_num, dept_no => 30);

DBMS_OUTPUT.PUT_LINE('30号部门工资总和:'||v_sum||',人数:'||v_num);

END;

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

例:

DECLARE

Var VARCHAR2(32);

BEGIN

Var := demo_fun('user1', 30, sex => '男');

DBMS_OUTPUT.PUT_LINE(var);

Var := demo_fun('user2', age => 40, sex => '男');

DBMS_OUTPUT.PUT_LINE(var);

Var := demo_fun('user3', sex => '女', age => 20);

DBMS_OUTPUT.PUT_LINE(var);

END;

参数默认值

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

例:

CREATE OR REPLACE FUNCTION demo_fun(

Name VARCHAR2,vAge INTEGER,

Sex VARCHAR2 DEFAULT '男')

RETURN VARCHAR2

IS

V_var VARCHAR2(32);

BEGIN

V_var := name||':'||TO_CHAR(age)||'岁,'||sex;

RETURN v_var;

END;

具有默认值的函数创建后,在函数调用时,如果没有为具有默认值的参数提供实际参数值,函数将使用该参数的默认值。

但当调用者为默认参数提供实际参数时,函数将使用实际参数值。

在创建函数时,只能为输入参数设置默认值,而不能为输入/输出参数设置默认值。

例:

DECLARE

Var VARCHAR(32);

BEGIN

Var := demo_fun('user1', 30);

DBMS_OUTPUT.PUT_LINE(var);

Var := demo_fun('user2', age => 40);

DBMS_OUTPUT.PUT_LINE(var);

Var := demo_fun('user3', sex => '女', age => 20);

DBMS_OUTPUT.PUT_LINE(var);

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

oracle函数创建与调用

函数的定义: CREATE OR REPLACE FUNCTION FUNCTION_TEST(PARAMER1 IN VARCHAR, -- 参数的类型不写长度 PARAMER2 OUT VARCH ...

Oracle存储过程创建及调用(转)

在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器.在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的.相对来说,数据库系统中的触发器也是一种存储 ...

Oracle存储过程创建及调用

在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器.在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的.相对来说,数据库系统中的触发器也是一种存储 ...

Oracle 存储过程创建及调用

--------创建存储过程------- create or replace procedure TestSPas begin update table_name set CREATE_TIMEST ...

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

一.函数是用来帮助我们封装.调用代码的最方便的工具! 二.函数的创建方法有三种: 三.函数的创建方式有3种,调用方式也不是单一的,调用方式有4种!      1.作为一个函数去调用 函数名+();(函 ...

Python:学会创建并调用函数

这是关于Python的第4篇文章,主要介绍下如何创建并调用函数. print():是打印放入对象的函数 len():是返回对象长度的函数 input():是让用户输入对象的函数 ... 简单来说,函数 ...

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

#!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sql ...

Python入门:学会创建并调用函数

这是关于Python的第4篇文章,主要介绍下如何创建并调用函数. print():是打印放入对象的函数 len():是返回对象长度的函数 input():是让用户输入对象的函数 ... 简单来说,函数 ...

浅谈Oracle函数返回Table集合

在调用Oracle函数时为了让PL/SQL 函数返回数据的多个行,必须通过返回一个 REF CURSOR 或一个数据集合来完成.REF CURSOR 的这种情况局限于可以从查询中选择的数据,而整个集合 ...

随机推荐

php 获取当前脚本的url的案例

关于用php 获取当前脚本的url很多朋友会说很简单,但是要获取很详细的就要经过多次判断. $PHP_TIME = time();$PHP_SELF = isset($_SERVER['PHP_SEL ...

再见WCF

转眼微软的WCF已走过十个年头,它是微软通信框架的集大成者,将之前微软所有的通信框架进行了整合,提供了统一的应用方式.记得从自己最开始做MFC时,就使用过Named Pipe命名管道,之后做Winfo ...

android usb host 读写USB设备

自android3.1以后android增加了操作USB设备的API. 官网地址:http://developer.android.com/guide/topics/connectivity/usb/ ...

Bootstrap_Javascript_滚动监视器

滚动监控器是Bootstrap提供的非常实用的JavaScript插件,被广泛应用到Web开发中.其表现形式是: 1.当用户鼠标滚动时,滚动条的位置会自动更新导航条中相应的导航项. 2.用户拖动滚动条 ...

ASP.NET实现文件下载

转:http://blog.csdn.net/codeshark/article/details/2473664 方式一:TransmitFile实现下载.将指定的文件直接写入 HTTP 响应输出流, ...

leetcode中的python学习

list.extend() list1.extend(list2(or string)) 将list2(or string)的所有元素添加到list1中: list1.append(list2(or ...

[TC14126]BagAndCards

[TC14126]BagAndCards 题目大意: 有\(n(n\le500)\)个袋子,第\(i\)个袋子里有\(count[i][j]\)张值为\(j(j\le m\le500)\)的牌.给一个 ...

[leetcode]103. Binary Tree Zigzag Level Order Traversal二叉树来回遍历

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...

double保存小数点后两位

double getRound(double a){ return (int(a * 100 + 0.5)) / 100.0; };//利用的是强制转换

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值