关于oracle中table函数的使用

使用oracle的table函数,查询函数返回的结果集,就如同查询普通表一样查询返回的结果集。

说明:  1、表函数可接受查询语句或游标作为输入参数,并可输出多行数据。

2、该函数可以平行执行,并可持续输出数据流,被称作管道式输出。

     3、应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表。

优势:  1、一些复杂的公共信息,但通过建立视图又实现不了,此时可以考虑使用管道输出。

     2、涉及运算较多,写个简单SQL实现起来较为麻烦,用table可以实现。

使用步骤:1、创建一个object类型的数据库类型对象(注意:此类型必须定义为数据库对象级别的类型,而不能定义包、函数级别的类型。否则,函数外部代码是无法识别该类型的)。

    CREATE OR REPLACE TYPE pay_code_obj_row AS OBJECT (

      PAY_APPL_CODE VARCHAR2(100)--付款申请号
    );

    2、创建一个嵌套表类型的数据酷儿类型对象,该类型也将用作函数中定义的返回类型(注意:此类型也必须定义为数据库对象级别的类型)。

    CREATE OR REPLACE TYPE pay_code_table IS TABLE OF pay_code_obj_row;

3、在函数中应用。

    create or replace function F_BPC_GET_PAYBILLID(

    BUDGET_DEPART_ID in VARCHAR2, --预算使用部门
     PAY_BILL_TYPE in NUMBER--支付类别
     )
     return pay_code_table
     as
     t_pay_appl_code pay_code_table;
     begin
     if PAY_BILL_TYPE=51 then
     select pay_code_obj_row(a.pay_appl_code) bulk collect
     into t_pay_appl_code from T_BPC_BU_NEW_PAY_PAY_D a;
     end if;
     return t_pay_appl_code;
     end F_BPC_GET_PAYBILLID;

小结:使用此函数,在函数中不能包含DML操作。除非在该函数定义为Oracle自治事务,即在声明函数时加上: PRAGMA AUTONOMOUS_TRANSACTION; 并在执行完DML后COMMIT。

原文地址:https://www.cnblogs.com/cxyad/p/9788330.html

时间: 2024-10-10 17:47:05

关于oracle中table函数的使用的相关文章

Oracle中Table函数简单应用实例

说明 表函数可接受查询语句或游标作为输入参数,并可输出多行数据. 该函数可以平行执行,并可持续输出数据流,被称作管道式输出. 应用表函数可将数据转换分阶段处理,并省去中间结果的存储和缓冲表. 优势 1.一些复杂的公用信息,但是建立视图又实现不了,此时可以考虑使用管道输出. 2.涉及运算较多,写个简单SQL实现起来较为麻烦,用table实现就ok了 实例 1.前期工作: create or replace type ty_row as object ( col1 varchar2(36), col

Oracle中SYS_CONNECT_BY_PATH函数的妙用

在Oracle中,SYS_CONNECT_BY_PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示. AD: Oracle中SYS_CONNECT_BY_PATH函数是非常重要的函数,下面就为您介绍一个使用SYS_CONNECT_BY_PATH函数的例子,实例如下: create table test (a varchar2(10),b varchar2(10)); INSERT INTO TEST (A, B) VALUES ('1', '我');

Oracle 中 decode 函数用法

Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值

oracle中extract()函数----用于截取年、月、日、时、分、秒

oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的部分 语法如下: extract ( { year | month | day | hour | minute | second } | { timezone_hour | timezone_minute } | { timezone_region | timezone_abbr } from { date_value | interval_value } ) 只可以从一个da

Oracle中REGEXP_SUBSTR函数(转)

Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格式如下:function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr :需要进行正则处理的字符串__pattern :进行匹配的正则表达式__positio

Oracle 中,函数如何返回结果集

在Oracle中,用函数返回结果集有时候要用到,下面是demo: create or replace type t_test as object ( id integer, create_time date, object_name varchar2(60) ); create or replace type t_test_table as table of t_test; 1.用数组的方式 create or replace function f_test(n in number defaul

Oracle中rownum_函数用法(转载)

解析oracle的rownum 对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀.举例说明:  例如表:student(学生)表,表结构为: sql 代码 11. ID     char(6) --学号 2.2 name VARCHAR2(10) --姓名 33. create table student (ID char(6), name VA

oracle中nvl()函数

oracle的nvl函数的使用方法 通过查询获得某个字段的合计值,假设这个值位null将给出一个预设的默认值 select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1 这里关心的nvl的使用方法,nvl(arg,value)代表假设前面的arg的值为null那么返回的值为后面的value 如: NVL(a,b)就是推断a是否是NULL,假设不是返回a的值.假设是返回b的值 通过查询获得某个字段的合计值,假设这个值位null将给出一个预设的默认

Oracle中SYS_CONNECT_BY_PATH函数的使用

在Oracle中,SYS_CONNECT_BY_PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示. sys_connect_by_path(字段名, 2个字段之间的连接符号),注意这里的连接符号不要使用逗号,oracle会报错,如果一定要用,可以使用replace替换一下, 方法如下 REPLACE(字段名,原字符,','). 还有,这个函数使用之前必须先建立一个树,否则无用. select  length(mc),mc,length( repla