今天写了个function,学习了一些orcale的语法,下面是修改后的简洁代码,以便以后查看。
CREATE OR REPLACE TYPE typetmp AS TABLE OF VARCHAR2(4000); CREATE OR REPLACE FUNCTION functiontmp(l_orders IN VARCHAR2) RETURN typetmp IS l_typetmp typetmp:= typetmp(); --初始化typetmp,后面通过数组的方式使用 noLen INTEGER := 8; l_order VARCHAR2(3000); l_orderIds VARCHAR2(3000); --input data l_strs VARCHAR2(3000); --DNCContactNo Strings l_str VARCHAR2(3000); --each DNCContactNo String l_orderId VARCHAR2(3000); --each order ---------------------------declare cursor start------------------------------- CURSOR t_cursor IS SELECT coltmp FROM tabletmp WHERE datetmp >= trunc(sysdate-1) and datetmp < trunc(sysdate); ---------------------------declare cursor end--------------------------------- BEGIN ---------------------------get orderIDs start--------------------------------- 使用cusor将查询结果集放入字符串l_orderIds中,两次使用fetch into ------------------------------------------------------------------------------ IF l_orders IS NULL THEN BEGIN OPEN t_cursor; FETCH t_cursor INTO l_order; WHILE t_cursor%FOUND LOOP--judge whether get last record IF l_orderIds IS NULL THEN l_orderIds := l_order||','; ELSE l_orderIds := l_order||','||l_orderIds||','; END IF; FETCH t_cursor INTO l_order;--loop cursor for get each record END LOOP; EXCEPTION WHEN OTHERS THEN CLOSE t_cursor; IF t_cursor%isopen THEN CLOSE t_cursor; END IF; END; END IF; --------------------------get orderIDs end------------------------------------ IF l_orders<>'' OR l_orders IS NOT NULL THEN l_orderIds := l_orders||','; END IF; WHILE l_orderIds IS NOT NULL LOOP l_orderId := SUBSTR(l_orderIds, 1, INSTR(l_orderIds, ',')-1); --instr()函数获取字符','在l_orderIds中的位置,返回位置号 ------------------------get orderid value start------------------------------ 采用"select into from"为指定字符插入值,只能接受一个结果,不能接受结果集 查询table判断是否有记录插入l_strs,如果没有结果,则赋值为null ------------------------------------------------------------------------ IF l_orderId IS NOT NULL THEN BEGIN SELECT b.coltmp1 INTO l_strs FROM tabletmp b where col=l_orderId; EXCEPTION WHEN no_data_found THEN l_strs := NULL; END; END IF; ------------------------get orderid value end------------------------------ WHILE l_strs IS NOT NULL LOOP l_str := substr(l_strs, 1, noLen); l_typetmp.EXTEND(1); l_typetmp(l_typetmp.COUNT) := l_str;--往新类型创建的便利l_typetmp里放入值 l_strs := SUBSTR(l_strs, noLen+2); l_str := NULL; END LOOP; l_strs := NULL; l_orderIds := SUBSTR(l_orderIds, length(l_orderId)+2); END LOOP; RETURN l_typetmp; END;
相关推荐
在这个例子中,我们将深入探讨Oracle过程的使用,以及如何通过“架包”(可能指的是Oracle的包,即PL/SQL包)来组织和复用这些过程。 首先,让我们理解什么是Oracle过程。在Oracle数据库中,过程是一组按顺序执行的...
这个例子展示了如何使用VB来调用Oracle存储过程,该过程返回一个游标类型(REF CURSOR),进而填充ADODB.Recordset对象。 首先,让我们看下Oracle端的PL/SQL代码: ```sql CREATE OR REPLACE PACKAGE "PKG_TEST" ...
在IT领域,尤其是在数据库管理与开发中,Oracle Function扮演着至关重要的角色。它们是数据库编程中的核心组件,允许用户创建可重用的代码块来执行特定任务并返回结果。本文将深入探讨Oracle自定义函数的概念、语法...
本文将详细介绍其中的评级函数,包括RANK()、DENSE_RANK()、PERCENT_RANK()、CUME_DIST()以及NTILE(),并以实际例子解释它们的应用。 1. RANK() 函数: RANK() 函数用于计算数据项在分组中的排名。当有多个记录...
根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### 1. Oracle自定义函数示例:随机数生成 #### 函数定义与实现 ...通过理解和应用这些例子,可以帮助开发者更好地掌握Oracle数据库的相关技术和功能。
第3个例子:Lookup Types和分支处理Function Lookup Types 是一种常见的工作流特性,用于在工作流中执行查找操作。在这个示例中,我们将学习如何使用 Lookup Types 和分支处理函数来执行查找操作。 第4个例子:...
Oracle 中修改用户密码复杂度的具体例子及操作过程(Unix 中) Oracle 数据库安全是企业信息安全的关键组件之一。在 Unix 环境中,修改 Oracle 用户密码复杂度是确保数据库安全的重要步骤。本文将详细介绍如何修改 ...
以下是一个创建自定义MD5加密包的例子: ```sql CREATE OR REPLACE PACKAGE Test_MD5 AS FUNCTION FN_GetMD5(P_Str_In VARCHAR2) RETURN VARCHAR2; FUNCTION FN_CheckUser(P_UserName_In VARCHAR2, P_Password_In...
《Oracle Solaris 11.1 man pages section3:Extended Library Function》是Oracle公司为Solaris 11.1操作系统提供的扩展库函数手册,包含了从Volume 1到Volume 466的详细文档。这份文档集是Oracle及其关联公司在2012...
在这个例子中,如果游标没有找到任何数据,程序将执行`WHEN NO_DATA_FOUND THEN`后面的代码,而不是抛出错误。 **方法二:使用%NOTFOUND属性** 在`FETCH`语句之后,你可以检查游标的`%NOTFOUND`属性来确定是否已经...
##### 2.5 第6个例子:Document、Forms、Function Result、隐藏标准按钮 此示例展示了如何在流程中使用文档、表单以及函数返回结果,并解释了如何自定义用户界面以提高用户体验。 ##### 2.6 第7个例子:常用的 # ...
3 管理 Oracle 实例 目标 3-2 初始化参数文件 3-3 PFILE initSID.ora 3-5 PFILE 例子 3-6 SPFILE spfileSID.ora 3-7 创建一个 SPFILE 3-8 SPFILE 例子 3-9 Oracle 管理文件 3-10 Oracle 管理文件例子 3-11 打开一个...
##### 2.5 第6个例子:Document、Forms、Function Result、隐藏标准按钮 在处理文档和其他形式的数据时,可以利用 Document 和 Forms 特性来创建和管理数据表单。Function Result 则用于返回函数调用的结果,这对于...
这可以通过窗口函数(Window Function)配合分组来实现。在提供的SQL语句中,主要使用了`SUM()`窗口函数和`CASE`表达式来判断当前区间段是否与前一个区间段重叠。 1. `CASE`表达式: 该表达式检查当前行的开始时间...
CREATE OR REPLACE FUNCTION ADD_NUMBERS(p_num1 NUMBER, p_num2 NUMBER) RETURN NUMBER AS result NUMBER; BEGIN result := p_num1 + p_num2; RETURN result; END ADD_NUMBERS; ``` 2. **配置Hibernate**...
本文将详细介绍Oracle存储过程如何返回结果集的方法,并通过具体的例子进行说明。 #### 二、存储过程返回结果集的原理 在Oracle中,存储过程可以通过引用游标(Ref Cursor)来返回结果集。Ref Cursor是一种特殊...
在这个例子中,`aggregation_function`通常是SUM、COUNT等,`column_to_aggregate`是要聚合的列,`pivot_column`是你要转换为列的原始列,`list_of_values`是`pivot_column`可能出现的值列表。 其次,`UNPIVOT`操作...
Oracle ODI(Oracle Data Integrator)是一款由Oracle公司推出的高效数据集成工具,它是基于Sunopsis公司Active Integration Platform的产品,自2006年10月被Oracle收购后,整合进了Oracle Fusion Middleware产品线...