我有一个select语句,如下所示
SELECT
PLN.PLAN_NAME,
HON.IVC_CODE,
HON.FORENAME,
HON.SURNAME,
HON.SALUTATION
FROM PLANS PLN
INNER JOIN COMPANIES COMP ON
COMP.COMP_CODE = PLN.COMP_CODE
INNER JOIN TRADING_STOCK_EXCHANGES TSE ON
TSE.COMP_CODE = COMP.COMP_CODE
INNER JOIN FINANCE_ORGANISATIONS FORG ON
FORG.FINANCE_ORG_ID = TSE.FINANCE_ORG_ID
INNER JOIN HOLDER_NAMES HON ON
HON.COMP_CODE = PLN.COMP_CODE
WHERE FORG.FINANCE_ORG_TYPE_CODE = 'SE' AND
COMP.COMP_CODE = 'B598' AND
--HON.FORENAME LIKE '%g%' AND
FORG.ORG_NAME IN ('NASDAQ','NEW YORK STOCK EXCHANGE');
这很有效,我可以看到结果。
我有一个包函数rr400_generate_sip_movement.get_sip_movement,它接受一个In参数和树输出参数。
declare
po_plan_name VARCHAR2(10 CHAR);
po_client_comp_name VARCHAR2(50 CHAR);
po_comp_code VARCHAR2(10 CHAR);
rc sys_refcursor;
ab sys_refcursor;
begin
rc := rr400_generate_sip_movement.get_sip_movement(137610, po_plan_name, po_client_comp_name, po_comp_code);
end;
当我运行这个命令时,我看到一条消息PL/SQL语句成功完成。我假设PL/SQL块是好的。
我想做的是将程序包函数的结果与我在IVC_CODE(每个选择语句的列名)上的选择语句结果连接起来。我只对程序包函数中的IVC感兴趣。
任何帮助都是非常感谢的。对不起,我是PL/SQL的新手。我已经尝试了一些方法,并根据@littlefoot在我的另一个问题中的建议
PL/SQL函数结果到表
这种方法可能是一种更干净、更整洁的方法。
3条答案
按热度按时间cnwbcb6i1#
我已经有一段时间没有使用Oracle了,但是通过从函数返回一个类型并使用table关键字应该是可行的。
ugmeyewa2#
如果我没理解错的话,函数返回refcursor(默认情况下)和3个
OUT
参数(可以存储到变量中),因为您希望在另一个查询中使用它们(变量),所以refcursor包含什么内容是无关紧要的。这里有个例子这是一个模拟
rr400_generate_sip_movement.get_sip_movement
的函数(不过我只返回一个OUT
值):让我们利用它;读取代码中的注解:
b09cbbtk3#
从我对这个问题的理解来看,我认为在您的情况下,使用流水线函数可能会更好,而不是返回游标。Oracle Doc:https://blogs.oracle.com/connect/post/pipelined-table-functions#:~:text=管道化的表函数是某个东西,SELECT语句的子句
但要小心:table()函数喜欢吞下no_data_found异常而不引发它们!这将导致一个空的数据集/表!