ADODB 中'resultset'参数的名称是什么。在经典.ASP中调用 Oracle 存储过程的命令?



我很高兴使用Classic维护一个遗留应用程序.ASP用于前端,为后端维护Oracle数据库。

我们有一个持续存在的问题,我们需要定期更新如下所示的查询,以使"结果集"参数的值不断增加

Set cmdStoredProc = Server.CreateObject("ADODB.Command")
cmdStoredProc.CommandText = "{call package_name.Procedure_Name(?,{resultset 1500, v_out_one, v_out_two})}"

它从 500 开始,然后错误修复使其成为 1000,然后是 1500,现在它再次成为我手表上的问题。

与其跟随我前任的脚步并任意增加它,我想尽可能多地了解此功能,但我很难找到有关它的任何文档。

是否有为此功能/参数/参数指定的特定名称?知道这一点应该足以让我找到更多关于它的信息,但对它的简要解释或链接到它的文档将是有利的。


从评论/答案中可以明显看出,定义正在调用的过程可能很有用:

PROCEDURE Procedure_Name
(n_site_id_in IN TABLENAME.site_org_id%TYPE,
v_out_one OUT t_c_out_one,
v_out_two OUT t_c_out_two)
IS   
--Select the CC and account code and descriptions into a cursor
CURSOR c1 IS
SELECT a.out_one,
a.out_two
FROM  TABLENAME a
WHERE a.site_org_id = n_site_id_in
ORDER BY a.out_one, a.out_two;
i INTEGER DEFAULT 1;
BEGIN
FOR get_c1 IN c1 LOOP
v_out_one(i) := get_c1.out_one;
v_out_two(i) := get_c1.out_two;
i := i + 1;
END LOOP;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('no data found');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('sqlerrm '||SQLERRM);
RAISE;
END Procedure_Name;

由此我们可以看到该过程定义了 3 个参数,1 个 IN 和 2 个 OUT,但对过程的调用似乎将 2 个 OUT 参数转换为基于结果集的集合。

正在使用的驱动程序是"Microsoft ODBC for Oracle"(MSORCL32.DLL)

过程package_name.Procedure_Name必须返回游标作为 out 参数。
这个resultset参数让我想到一个参数,该参数定义了可以同时打开的游标数。
事实是,它似乎不是正确的做事方式,因为这意味着每次调用该过程时,游标都不会关闭。
在你的代码中,你必须有像 stg

Set myRecordSet = cmdStoredProc.Execute()

此记录集用于读取游标内容。 请检查它是否在使用后关闭

myRecordSet.Close()
Set myRecordset = Nothing

"resultset"参数没有任何特殊名称,它只是称为结果集参数。

有多种使用方式:

返回单个结果集中的所有列(当前):

Set cmdStoredProc = Server.CreateObject("ADODB.Command")
cmdStoredProc.CommandText = "{call package_name.Procedure_Name(?,{resultset 1500, v_out_one, v_out_two})}"

将每一列作为单个结果集返回(返回 2 个单独的结果集):

Set cmdStoredProc = Server.CreateObject("ADODB.Command")
cmdStoredProc.CommandText = "{call package_name.Procedure_Name(?,{resultset 1500, v_out_one}, {resultset 1500, v_out_two})}"

在此处阅读更多相关信息: https://learn.microsoft.com/en-us/sql/odbc/microsoft/returning-array-parameters-from-stored-procedures

假设,它用于设置可以从过程调用返回的记录量的限制。

该过程的定义显示它返回 2 个数组作为输出,因此如果其中一个数组超过结果集参数中设置的限制,则会引发错误。

最新更新