oracle - 调用另一个存储过程并设置为局部变量并使用类似表
问题描述
我想调用以前创建的一个存储过程并将SYS_REFCURSOR
输出设置为局部变量(另一个存储过程),我想像使用表一样使用这个新变量。我需要应用一些位置和过滤器
在这个存储过程中,我试图调用一个远程存储过程,然后像变量一样使用它:
CREATE OR REPLACE PROCEDURE getmovimientosagenteres (
primerdia IN STRING,
ultimodia IN STRING,
idbusqueda IN INT,
identificador IN INT,
tipo IN INT,
result OUT SYS_REFCURSOR
) AS
variable1 SYS_REFCURSOR;
BEGIN
variable1 := sch_descargas_app.getmovimientosagente(primerdia, ultimodia, idbusqueda, identificador, tipo,
result);
IF
identificador = 1 AND tipo = 0
THEN
OPEN result FOR SELECT
*
FROM
variable1;
END IF;
END;
我原来的存储过程有同样的逻辑,它是一个片段:
CREATE OR REPLACE PROCEDURE getmovimientosagente (
primerdia IN STRING,
ultimodia IN STRING,
idbusqueda IN INT,
identificador IN INT,
tipo IN INT,
result OUT SYS_REFCURSOR
) AS
BEGIN
IF
identificador = 1 AND tipo = 0
THEN
OPEN result FOR SELECT DISTINCT
id_supervisoria, --0
nom_supervisoria, --1
id_agente, --2
nombre_agt, --3
f_pago_rbo, --4
num_poliza, --5
ramo, --6
CASE
解决方案
我认为这是不可能的,除非 refcursor 有一个预定义的列列表。
更简单的测试用例版本:
create or replace function demo_get_refcursor
return sys_refcursor
as
resultset sys_refcursor;
begin
open resultset for
select 'Hello' as col from dual;
return resultset;
end;
/
create or replace procedure demo_use_resultset as
first_resultset sys_refcursor := demo_get_refcursor();
second_resultset sys_refcursor;
begin
open second_resultset for
select * from first_resultset;
end;
/
Warning: Procedure created with compilation errors.
SQL> show errors
Errors for PROCEDURE DEMO_USE_RESULTSET:
LINE/COL ERROR
---------- -----------------------------------------------------------
6/9 PL/SQL: SQL Statement ignored
6/23 PL/SQL: ORA-00942: table or view does not exist
variable1
不是表或视图,因此编译失败并出现ORA-00942: table or view does not exist。
如果您编写了一个接受 refcursor 作为输入以返回每一行的表函数,该函数将不知道如何定义记录,因为它直到运行时才定义。(或者是吗?如果列列表在编译时是已知的,那会改变事情。)
也许在 19c 中,您可以在解析 ref 游标然后查询后动态创建和填充私有临时表dbms_sql
,但这将是一个相当大的项目,我什至不确定该方法是否有效。
推荐阅读
- go - 如何在无限 for 循环中实现 goroutine;for{} 在等待组完成后重试?
- python - Django 'tuple' 对象没有属性 'save'
- sql - 查询以根据特定时间范围过滤掉数据
- javascript - 如何找到()一个对象属性匹配多个指定数组中的值
- python - MobilenetV3 Top 5 准确性问题
- python - 如何用多个单独的训练数据训练 LSTM 模型?
- r - 如何在 sparklyr 中操作日期?
- bootstrap-4 - 引导表与背景颜色混淆
- python - 为什么使用张量流 keras 的多变量线性回归会产生 NaN 损失
- ios - 实现分页后,我在滚动 tableview 时遇到 UIImage 问题