`
jsx112
  • 浏览: 315876 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

一个简单的oracle函数返回数组的例子

阅读更多

 create or replace type t_ret_table is table of varchar2(20);

create or replace function f_test(var_num in integer) return t_ret_table is

var_out t_ret_table;

begin

var_out := t_ret_table();

var_out.extend(var_num);

for i in 1..var_num loop

var_out(i) := i;

end loop;

return var_out;

end f_test;

/

set serverout on

declare

aa t_ret_table;

begin

aa := f_test(10);

for i in 1..aa.count loop

dbms_output.put_line(aa(i));

end loop;

end;

/

一个分隔字符串的例子:

把'a|||b|||c'字符串分隔成

a

b

c

create or replace function f_test(var_str in string) return t_ret_table is

var_out t_ret_table;

var_tmp varchar2(2000);

var_element varchar2(2000);

begin

var_tmp := var_str;

var_out := t_ret_table();

while instr(var_tmp,'|||')>0 loop

var_element := substr(var_tmp,1,instr(var_str,'|||')-1);

var_tmp := substr(var_tmp,instr(var_str,'|||')+3,length(var_tmp));

var_out.extend(1);

var_out(var_out.count) := var_element;

end loop;

var_out.extend(1);

var_out(var_out.count) := var_tmp;

return var_out;

end f_test;

/

set serverout on

declare

aa t_ret_table;

begin

aa := f_test('a|||b|||c');

for i in 1..aa.count loop

dbms_output.put_line(aa(i));

end loop;

end;

/

create or replace function f_test(var_str in string) return t_ret_table PIPELINED

as

var_tmp varchar2(2000);

var_element varchar2(2000);

begin

var_tmp := var_str;

while instr(var_tmp,'|||')>0 loop

var_element := substr(var_tmp,1,instr(var_str,'|||')-1);

var_tmp := substr(var_tmp,instr(var_str,'|||')+3,length(var_tmp));

pipe row(var_element);

end loop;

pipe row(var_tmp);

return;

end f_test;

/

select * from table(f_test('a|||b|||c'));

 

另外一个分割字符串的例子:

分割字符串问题!

问题源自http://www.itpub.net/626418.html

/*

怎样支掉字符串中逗号间重复的字符

如 ',1,2,5,9,1,2,5,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,1,2,9,1,2,9,1,2,3,9,1,2,3,9,'怎样支掉字符串中逗号间重复的字符,并将字符升序排列,得到

',1,2,3,5,9,'

百思不得其解,是高手的试一下。

解答:

select col from(

select sys_connect_by_path(col,',')||',' col,level from(

select col,row_number() over(order by rownum) rn from (

select distinct substr(col,instr(col,',',1,rownum)+1,instr(col,',',1,rownum+1)-instr(col,',',1,rownum)-1) col from (

select ',1,2,5,9,1,2,5,9,1,3,9,' col from dual

) connect by rownum<length(translate(col,','||col,','))

)

)

connect by prior rn = rn -1 order by level desc

) where rownum=1

*/

这个问题的解决办法中的一部分(按照固定分隔符分割字符串)可以解决http://www.itpub.net/515354.html

/*

要求用pl/sql写一个函数, 实现根据分割符把原字符串分成若干个字符串功能.

输入: string(字符串) 和 Delimiter (分隔符)

输出: substr1, ..., substrn (根据分割后的字符串排序, 不是子串在原字符串中的顺序)

解答:

select substr(col,instr(col,',',1,rownum)+1,instr(col,',',1,rownum+1)-instr(col,',',1,rownum)-1) col from (

select ',1,2,5,9,1,2,5,9,1,3,9,' col from dual

) connect by rownum<length(translate(col,','||col,','))

*/

分享到:
评论

相关推荐

    java调用存储过程返回数组

    以下是一个简单的示例,展示如何处理自定义数组类型的输入和输出: ```java // 假设已有Java数组 String[] userSeqIdArray = ...; String[] usernameArray = ...; // 创建Oracle连接 OracleConnection oraConn = ...

    Oracle数组的使用

    - **FIRST/LAST**:返回数组的第一个或最后一个元素的位置。 - **NEXT/PRIOR**:返回指定元素后或前的一个元素的位置。 - **TRIM**:移除数组尾部的空元素。 #### ASSOCIATIVE ARRAY (Indexed Table) `ASSOCIATIVE...

    oracle管道函数用法

    这个类型可以是一个简单的数组类型,也可以是一个更为复杂的表类型。例如: ```sql CREATE OR REPLACE TYPE MsgType AS TABLE OF VARCHAR2(4000); ``` 这里定义了一个名为`MsgType`的表类型,每个元素可以存储最多...

    Oracle中引入的JSON函数.pdf

    使用`JSON_QUERY`函数可以从JSON文档中提取一个JSON序列(数组或对象): ```sql SELECT JSON_QUERY( '{"employees": [{"name":"SMITH", "department":"ACCOUNTING"}, {"name":"ALLEN", "department":"SALES"}]}',...

    只能在PL/SQL中访问联合数组。

    关于`add_months`函数,它是Oracle PL/SQL中用于日期运算的一个内置函数,它接收两个参数:一个起始日期`date1`和要添加的月份数`n`,然后返回新的日期。这个函数在处理日期相关的业务逻辑时非常实用。例如,计算...

    Oracle 获取JSON字符串对象的属性值

    这个查询首先找到`'sex:"'`的位置,然后计算出下一个`'"'`的位置,从而截取出`sex`的值。 另一种更直观的方法是使用Oracle的`REGEXP_REPLACE()`函数,它支持正则表达式的匹配和替换。对于上述例子,我们可以编写...

    用Python读取Oracle函数返回值

    总的来说,这个例子展示了如何在Python中有效地处理Oracle数据库函数返回的大规模文本数据。值得注意的是,虽然`eval()`函数在此处简化了数据转换,但使用它可能存在安全风险,因为它会执行传入的字符串。在实际应用...

    存储过程返回数组对象示例代码

    当存储过程返回数组对象时,它实际上是在返回一个包含多个对象的数据结构,类似于编程语言中的列表或数组。本示例将详细介绍如何在Oracle数据库中创建存储过程来返回数组对象。 首先,我们需要定义一个对象类型,这...

    怎么返回一个数据集.doc

    在例子中,`shifts_ty`定义了一个记录类型,表示`str_shifts`表的一行。然后,`shifts`是一个索引表,用于存储`shifts_ty`类型的元素。`test_proc`函数创建了一个名为`shiftspkg`的表变量,并通过循环遍历游标`q1`,...

    labview 调用oracle数据库

    在“oracle测试创建表.vi”这个例子中,可能包含一个LabVIEW程序,该程序使用SQL的CREATE TABLE语句来定义新的表结构。CREATE TABLE语法如下: ```sql CREATE TABLE 表名 ( 列名1 数据类型, 列名2 数据类型, ......

    Oracle_database_11g完全参考手册

    这里通过`BirthDate`参数接收日期值并返回一个数字表示年龄,通过`SysDate`系统函数获取当前系统日期进行计算。 ### 二、类型体与嵌套表 接着,我们看到`ANIMAL_TY`的类型体定义,其中`AGE`函数的实现使用了`ROUND...

    oracle 迅速查询和更新大数据

    在这个例子中,`ref_bulk`变量定义为`bulk_type`类型,这是一个包含多个`emp_table`表行的数组。通过`BULK COLLECT INTO`语句,一次性获取最多250,000条记录,并存储到`ref_bulk`数组中。随后,使用`FORALL`循环将...

    pro c实例(ORACLE官方实例)

    总之,这个ORACLE官方的Pro*C实例为我们提供了一个宝贵的教育资源,可以帮助我们理解如何在C语言环境中高效地操作Oracle数据库。尽管示例可能有些老旧,但基本概念和方法至今仍具有指导意义。通过对这个实例的深入...

    封装数据访问层的一个小例子

    本示例将详细讲解如何封装一个简单数据访问层,并通过两个关键文件——`TSqlDB.cs`和`TDataRset.cs`来实现这一过程。 首先,我们来看`TSqlDB.cs`文件。这个文件通常包含了与数据库连接、执行SQL语句以及管理数据库...

    oracle 字符串转成行

    `SUBSTR` 是Oracle中的一个字符串函数,用于提取字符串的一部分。在给定的例子中,它用于截取逗号分隔的字符串中每个单独的元素。例如: ```sql SUBSTR (T.RPT_ID, INSTR (T.RPT_ID,',',1,C.LV)+ 1, INSTR (T.RPT...

    Oracle简单存储过程示例(持续追加)

    例如,如果我们想创建一个名为`ADD_TWO_NUMBERS`的存储过程,该过程接受两个整数参数并返回它们的和,可以这样写: ```sql CREATE OR REPLACE PROCEDURE ADD_TWO_NUMBERS (num1 IN NUMBER, num2 IN NUMBER, result...

    Oracle--存储过程

    在这个例子中,`save_discount方案`过程接收客户ID和一个折扣数组,保存折扣信息;而`calculate_total`函数则计算传入折扣数组的总和。这样的包结构使得我们可以方便地管理和复用这些业务逻辑。 总之,Oracle存储...

    VC++6.0核心编程源码.rar

    当一个Windows函数返回一个错误代码时,它常常可以用来了解函数为什么会运行失败。Microsoft公司编译了一个所有可能的错误代码的列表,并且为每个错误代码分配了一个32位的号码。 从系统内部来讲,当一个Windows函数...

Global site tag (gtag.js) - Google Analytics