在 PL\SQL 到 return 数据集中设置 SYS_REFCURSOR
Setting Up SYS_REFCURSOR in PL\SQL to return dataset
我有一个 PL\SQL,return 是一个数据集,它本质上是在两个不同的表中按帐户||产品验证交易量。
我的最终目标是通过传递日期参数(通过 Excel 提供)并调用存储的数据集将此数据集直接拉入电子表格(使用 Excel-VBA) -程序。
阅读 PL\SQL 后,我似乎需要一个游标变量来存储提供的最终结果数据集,以便我可以将其写入电子表格(作为记录集)。
按照网上的例子,我的程序是这样写的
CREATE OR REPLACE PROCEDURE PROC_REG_SPLIT_RECON (dStart IN Date, dEnd IN Date)
-- procedure to check regional splits creation is okay
-- procedure checks volumes by account and product from FACT_TRADE_PRESPLIT_ROLLUP to FACT_TRADE_ROLLUP
-- SQLDeveloper doesn't like this section and I can't figure out how to set this up correctly, no matter what I do and research.
RETURN SYS_REFCURSOR
AS
l_return SYS_REFCURSOR;
-- end of section not working
BEGIN
OPEN l_return FOR
SELECT OpStats.Account, OpStats.Platform, OpStats.Volume OpStatsVol, RegSplits.Volume RegSplitsVol, (OpStats.Volume-RegSplits.Volume) Difference FROM
(a bunch of union queries) OpStats,
(a bunch of other union queries) RegSplits
WHERE OpStats.Account = RegSplits.Account (+) And OpStats.Platform = RegSplits.Platform (+)
ORDER BY OpStats.Account ASC, OPStats.Platform DESC;
RETURN l_return;
END;
FWIW,查询工作正常并且 return 结果符合预期。有谁知道为什么我的 PL\SQL 没有编译?或者如果我的方法偏离了基础?
您正在创建一个 Oracle 过程,并且该过程不能具有具有指定 return 数据类型的 RETURN 关键字。创建一个 Oracle 函数来做你想做的事。
CREATE OR REPLACE FUNCTION FUN_REG_SPLIT_RECON
...
RETURN SYS_REFCURSOR
....
尝试创建函数,因为 RETURN 语句仅用于 FUCNTION。 RETURN PROCEDURE 中的语句通常仅用于在所需位置终止该过程。希望下面的代码有所帮助。
CREATE OR REPLACE FUNCTION PROC_REG_SPLIT_RECON( --Function has to be incorporated
dStart IN DATE,
dEnd IN DATE)
-- procedure to check regional splits creation is okay
-- procedure checks volumes by account and product from FACT_TRADE_PRESPLIT_ROLLUP to FACT_TRADE_ROLLUP
-- SQLDeveloper doesn't like this section and I can't figure out how to set this up correctly, no matter what I do and research.
RETURN SYS_REFCURSOR
AS
l_return SYS_REFCURSOR;
-- end of section not working
BEGIN
OPEN l_return FOR SELECT OpStats.Account, OpStats.Platform, OpStats.Volume OpStatsVol, RegSplits.Volume RegSplitsVol, (OpStats.Volume-RegSplits.Volume) Difference FROM (a bunch OF
UNION queries) OpStats, (a bunch OF other
UNION queries) RegSplits WHERE OpStats.Account = RegSplits.Account (+) AND OpStats.Platform = RegSplits.Platform (+) ORDER BY OpStats.Account ASC, OPStats.Platform DESC;
RETURN l_return;
END;
我有一个 PL\SQL,return 是一个数据集,它本质上是在两个不同的表中按帐户||产品验证交易量。
我的最终目标是通过传递日期参数(通过 Excel 提供)并调用存储的数据集将此数据集直接拉入电子表格(使用 Excel-VBA) -程序。
阅读 PL\SQL 后,我似乎需要一个游标变量来存储提供的最终结果数据集,以便我可以将其写入电子表格(作为记录集)。
按照网上的例子,我的程序是这样写的
CREATE OR REPLACE PROCEDURE PROC_REG_SPLIT_RECON (dStart IN Date, dEnd IN Date)
-- procedure to check regional splits creation is okay
-- procedure checks volumes by account and product from FACT_TRADE_PRESPLIT_ROLLUP to FACT_TRADE_ROLLUP
-- SQLDeveloper doesn't like this section and I can't figure out how to set this up correctly, no matter what I do and research.
RETURN SYS_REFCURSOR
AS
l_return SYS_REFCURSOR;
-- end of section not working
BEGIN
OPEN l_return FOR
SELECT OpStats.Account, OpStats.Platform, OpStats.Volume OpStatsVol, RegSplits.Volume RegSplitsVol, (OpStats.Volume-RegSplits.Volume) Difference FROM
(a bunch of union queries) OpStats,
(a bunch of other union queries) RegSplits
WHERE OpStats.Account = RegSplits.Account (+) And OpStats.Platform = RegSplits.Platform (+)
ORDER BY OpStats.Account ASC, OPStats.Platform DESC;
RETURN l_return;
END;
FWIW,查询工作正常并且 return 结果符合预期。有谁知道为什么我的 PL\SQL 没有编译?或者如果我的方法偏离了基础?
您正在创建一个 Oracle 过程,并且该过程不能具有具有指定 return 数据类型的 RETURN 关键字。创建一个 Oracle 函数来做你想做的事。
CREATE OR REPLACE FUNCTION FUN_REG_SPLIT_RECON
...
RETURN SYS_REFCURSOR
....
尝试创建函数,因为 RETURN 语句仅用于 FUCNTION。 RETURN PROCEDURE 中的语句通常仅用于在所需位置终止该过程。希望下面的代码有所帮助。
CREATE OR REPLACE FUNCTION PROC_REG_SPLIT_RECON( --Function has to be incorporated
dStart IN DATE,
dEnd IN DATE)
-- procedure to check regional splits creation is okay
-- procedure checks volumes by account and product from FACT_TRADE_PRESPLIT_ROLLUP to FACT_TRADE_ROLLUP
-- SQLDeveloper doesn't like this section and I can't figure out how to set this up correctly, no matter what I do and research.
RETURN SYS_REFCURSOR
AS
l_return SYS_REFCURSOR;
-- end of section not working
BEGIN
OPEN l_return FOR SELECT OpStats.Account, OpStats.Platform, OpStats.Volume OpStatsVol, RegSplits.Volume RegSplitsVol, (OpStats.Volume-RegSplits.Volume) Difference FROM (a bunch OF
UNION queries) OpStats, (a bunch OF other
UNION queries) RegSplits WHERE OpStats.Account = RegSplits.Account (+) AND OpStats.Platform = RegSplits.Platform (+) ORDER BY OpStats.Account ASC, OPStats.Platform DESC;
RETURN l_return;
END;