首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Oracle中执行函数X次并返回结果集

在Oracle中执行函数X次并返回结果集
EN

Stack Overflow用户
提问于 2014-12-26 18:52:19
回答 1查看 334关注 0票数 0

我有SQL Server背景,目前在Oracle数据库上工作,所以请容忍我与不同的术语或缺乏基本的Oracle知识。

在Oracle12中,我有一个函数"ITEM_NUMBER_TYPE_SQL.GET_NEXT(O_ERROR_MESSAGE,IO_ITEM_NO,I_ITEM_TYPE);“如果成功,它将返回true/false并填充"IO_ITEM_NO”变量/参数。如果发生错误,它将填充"O_ERROR_MESSAGE“变量/参数。到目前为止,我可以成功地执行这个函数,并通过使用返回下一个项目编号(即IO_ITEM_NO)的.Net应用程序获得值。.Net应用程序已经知道它需要多少项目编号,并在.Net应用程序端(而不是在oracle端)多次执行此函数,但由于.Net应用程序盒与oracle盒在地理上是分开的,因此它花费了太多时间(每次函数调用大约0.5秒,即使使用相同的连接)。

如何在Oracle端执行此函数X次,并将IO_ITEM_NO值存储到Oracle端的临时表/存储中,并使用一次调用在.Net端检索结果集?

执行此函数的用户将只有execute和read权限,并且不可能在Oracle端创建对象,除非它是execute/read权限的一部分。(例如,在SQL server中,具有读取权限的用户可以创建临时表,但不能创建永久表)

下面是一个伪代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DECLARE  v_bool BOOLEAN;
DECLARE O_ERROR_MESSAGE VARCHAR2(200);
DECLARE IO_ITEM_NO VARCHAR2(25);
DECLARE COUNT INT;
DECLARE TEMP_TABLE TABLE AS (ITEM_NO VARCHAR2(25));
BEGIN
                COUNT := 10; -- Means we need to execute ITEM_NUMBER_TYPE_SQL.GET_NEXT function 10 times
                FOR i IN 1 .. COUNT
                                v_bool := ITEM_NUMBER_TYPE_SQL.GET_NEXT(O_ERROR_MESSAGE, IO_ITEM_NO, 'ITEM');
                                IF(v_bool = TRUE) 
                                                THEN SELECT 1 INTO :v_Return FROM DUAL; 
                                                -- Following statement inserts the IO_ITEM_NO value which was returned from the function into the temp table
                                                INSERT INTO TEMP_TABLE (ITEM_NO)
                                                SELECT IO_ITEM_NO FROM DUAL; 
                                END IF;
                                IF(v_bool = FALSE) THEN 
                                                SELECT 0 INTO :v_Return FROM DUAL; 
                                                i := 10; -- Breaking the loop as error encountered
                                END IF;
                END LOOP;
                -- Finally send the resultset back
                SELECT ITEM_NO FROM TEMP_TABLE;
END;
EN

回答 1

Stack Overflow用户

发布于 2014-12-26 19:51:30

首先,Oracle与MSSQL非常不同。你应该捕捉到任何‘像在MSSQL中一样’的尝试,并检查‘这个问题应该如何用Oracle来处理’。最常见的错误是尝试使用MSSQL中的临时表。

其次,对单个任务进行多次调用在任何地方都是糟糕的决定。如果可能的话,应该避免这种情况。

一般来说,看起来甲骨文的pipelined functions就是为这项任务而设计的。这些函数可以逐行返回结果集,直到您的函数返回false为止。它应该是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from table(my_table_function(10));

function my_table_function(limit integer) is
begin
  while get_next(...) loop
    pipe row(some_data_returned);
  end loop;
end;

还有一件事:在甲骨文中,"O_ERROR_MESSAGE“是糟糕的设计。你应该使用异常来代替。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27660788

复制
相关文章
怎样让Oracle的存储过程返回结果集
Oracle存储过程: CREATE OR REPLACE PROCEDURE getcity ( citycode IN VARCHAR2, ref_cursor OUT sys_refcursor /* 这个sys_refcursor类型在SYS.STANDARD包中 */ ) AS BEGIN OPEN ref_cursor FOR SELECT * FROM tb_city_code WHERE city_code = ci
白石
2019/08/23
2.9K0
【JDBC】IDEA连接数据库,执行查询操作,返回结果集并输出。
(点击进入专栏) 【1】idea添加mysql-jar包 【2】使用IDEA连接数据库,执行增删改操作。 【3】IDEA连接数据库,执行查询操作,返回结果集并输出。
.29.
2022/11/15
2.8K0
【JDBC】IDEA连接数据库,执行查询操作,返回结果集并输出。
Python多线程并行执行两个函数,并获取线程返回结果
本人使用场景是,获取用户数据,然后插入到库中,并返回查询该用户的相关结果,实际上包含两个操作:
用户7886150
2020/12/01
2.7K0
C#中使用Oracle存储过程返回结果集
Oracle中可以使用游标(Cursor)对数据集进行操作,但在存储过程输出参数中直接使用Cursor错误,此时的Cursor应该是一个定义游标的关键字并非类型,所以先要定义一个包,在包中声明全局的自定义游标类型,如:
张果
2022/05/09
1.1K0
uniapp如何封装全局方法 并返回执行结果
在uniapp中你可以这样实现,你可以使用Promise对象来实现当全局公共方法执行完后执行调用者的逻辑。以下是一个简单的示例代码:
兔云小新LM
2023/05/25
3.3K0
uniapp如何封装全局方法 并返回执行结果
oracle结果集已耗尽_oracle字符串函数
select lastname from hrmresource where id in
全栈程序员站长
2022/10/01
4420
「Python」函数返回值、嵌套调用、执行结果
在程序开发中,有时候会希望一个函数执行结束后,告诉调用者一个结果,一遍调用者针对具体的结果做后续的处理。
python自学网
2022/05/16
2.2K0
「Python」函数返回值、嵌套调用、执行结果
java 查看进程状态_java执行shell命令并返回结果
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/172503.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/22
8810
java 查看进程状态_java执行shell命令并返回结果
【DB笔试面试611】在Oracle中,什么是结果集缓存?
结果集缓存(Result Cache)是Oracle 11g的新特性,用于存储经常使用的SQL语句和函数的查询结果。当相同语句再次执行的时候,Oracle就不用再次重复执行(包括扫描索引、回表、计算、逻辑读、物理读等操作),而是直接访问内存得到结果。结果集缓存可以将SQL语句查询的结果缓存在内存(SGA的Shared Pool)中,从而显著地改进需要多次执行和查询相同结果的SQL语句的性能。
AiDBA宝典
2019/09/29
2.1K0
GaussDB(DWS)自定义函数返回多结果集
在使用GaussDB(DWS)过程中经常会创建自定义函数,总结了多结果集返回的使用方法。
hankleo
2021/07/08
1.4K0
jenkins 执行构建 并查看结果
继完成构建项目配置http://www.cnblogs.com/yajing-zh/p/5111060.html后,则要执行构建。
微风-- 轻许--
2019/08/01
2.7K0
js如何返回异步函数结果
假设您有这样一个问题:您正在进行一个异步调用,并且需要从原始函数返回该调用的结果。
IT工作者
2022/01/01
6.4K0
JavaScript 函数中带有参数并返回值的函数
document.getElementById("demo").innerHTML=myFunction(4,3);
好派笔记
2021/09/18
5.7K0
如何在应用程序中调用CMD并返回运行结果
要求做一个图形界面的应用程序,输入命令行的命令,在后台调用CMD程序执行该命令但不显示DOS命令行窗口,而且能实时显示运行的结果。哪位知道怎么处理?谢啦
用户3519280
2023/07/06
3020
使用Dapper读取Oracle多个结果集
Dapper对SQL Server支持很好,但对于Oracle有些用法不一样,需要自己进行特殊处理。
跟着阿笨一起玩NET
2022/05/10
1.2K0
返回执行结果的任务队列:ExecutorCompletionService
有时候我们需要展示一些内容,如果等所有内容都加载完毕再展示这样反而会降低用户体验; 因为如果消耗时间长那么用户需要瞪着空白的页面,反而会失去兴趣; 所以我们希望加载一点资源显示一点,对于那么超过我们容忍范围还未加载完毕的资源我们应该 不再去加载,放弃本次加载或者显示一些默认结果 模拟: final Random r = new Random(); // 创建一个固定大小的线程池 ExecutorService es = Executors.newFixedThreadPool(
用户1215919
2018/02/27
1.3K0
Oracle——无法在查询中执行 DML 操作
create or replace function test_f(id varchar2) return varchar2 is Result varchar2(100); begin insert into sfcs_temp_17109 (sn)values(id);
_一级菜鸟
2019/09/10
4.3K0
Oracle——无法在查询中执行 DML 操作
Ajax post 请求后端,server返回Map结果集
一、应用场景 当前端发出Ajax请求,后端需要返回Map结果集 二、代码 1、ResultFactory.java package com.XXXX.tv.vrs.service.util; import java.util.HashMap; import java.util.Map; public class ResultFactory { public static Map<String,Object> makeOkResult(Object data){ Map<String,Objec
week
2018/08/24
9390
点击加载更多

相似问题

Oracle SQL -函数返回结果集

10

执行存储过程并返回结果集

26

如何在Oracle函数中返回动态结果集

10

执行Oracle函数并返回返回值

20

Cognos需要查询oracle存储过程并返回结果集。

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文