在 Classic.ASP 中调用 Oracle 存储过程的 ADODB.Command 中的 'resultset' 参数的名称是什么?
What is the name of the 'resultset' argument in an ADODB.Command calling an Oracle stored procedure in Classic.ASP?
我很高兴使用 Classic.ASP 前端和后端 Oracle 数据库维护遗留应用程序。
我们有一个持续的问题,我们需要像下面这样定期更新查询,以使 'resultset' 参数
的值不断增加
Set cmdStoredProc = Server.CreateObject("ADODB.Command")
cmdStoredProc.CommandText = "{call package_name.Procedure_Name(?,{resultset 1500, v_out_one, v_out_two})}"
开始时是 500,然后通过错误修复使其达到 1000,然后是 1500,现在它又成为我手表上的一个问题。
我不想步我前任的后尘随意增加它,而是想尽可能多地了解此功能,但正在努力寻找有关它的任何文档。
这个功能/参数/参数是否有特定的名称?知道这个应该足以让我找到更多关于它的信息,但对其进行简要解释或link 对它的文档将是有利的。
从评论/回答中可以明显看出,定义被调用的过程可能很有用:
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
必须 return 游标作为输出参数。
这个resultset
参数让我想到了定义可以同时打开的游标数量的参数。
事实上,这似乎不是正确的做法,因为这意味着每次调用过程时,游标都没有关闭。
在你的代码中你必须有像
这样的 stg
Set myRecordSet = cmdStoredProc.Execute()
此记录集用于读取游标内容。
使用
后请检查它是否关闭
myRecordSet.Close()
Set myRecordset = Nothing
'resultset' 参数没有任何特殊名称,它被称为结果集参数。
有多种使用方式:
Return 单个结果集中的所有列(当前为):
Set cmdStoredProc = Server.CreateObject("ADODB.Command")
cmdStoredProc.CommandText = "{call package_name.Procedure_Name(?,{resultset 1500, v_out_one, v_out_two})}"
Return 每列作为一个结果集(到return 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://docs.microsoft.com/en-us/sql/odbc/microsoft/returning-array-parameters-from-stored-procedures
正如假设的那样,它用于设置可以从过程调用中 returned 的记录数量限制。
该过程的定义表明它return将 2 个数组作为输出,因此如果其中任何一个超出结果集参数中设置的限制,将引发错误。
我很高兴使用 Classic.ASP 前端和后端 Oracle 数据库维护遗留应用程序。
我们有一个持续的问题,我们需要像下面这样定期更新查询,以使 'resultset' 参数
的值不断增加Set cmdStoredProc = Server.CreateObject("ADODB.Command")
cmdStoredProc.CommandText = "{call package_name.Procedure_Name(?,{resultset 1500, v_out_one, v_out_two})}"
开始时是 500,然后通过错误修复使其达到 1000,然后是 1500,现在它又成为我手表上的一个问题。
我不想步我前任的后尘随意增加它,而是想尽可能多地了解此功能,但正在努力寻找有关它的任何文档。
这个功能/参数/参数是否有特定的名称?知道这个应该足以让我找到更多关于它的信息,但对其进行简要解释或link 对它的文档将是有利的。
从评论/回答中可以明显看出,定义被调用的过程可能很有用:
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
必须 return 游标作为输出参数。
这个resultset
参数让我想到了定义可以同时打开的游标数量的参数。
事实上,这似乎不是正确的做法,因为这意味着每次调用过程时,游标都没有关闭。
在你的代码中你必须有像
Set myRecordSet = cmdStoredProc.Execute()
此记录集用于读取游标内容。 使用
后请检查它是否关闭myRecordSet.Close()
Set myRecordset = Nothing
'resultset' 参数没有任何特殊名称,它被称为结果集参数。
有多种使用方式:
Return 单个结果集中的所有列(当前为):
Set cmdStoredProc = Server.CreateObject("ADODB.Command")
cmdStoredProc.CommandText = "{call package_name.Procedure_Name(?,{resultset 1500, v_out_one, v_out_two})}"
Return 每列作为一个结果集(到return 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://docs.microsoft.com/en-us/sql/odbc/microsoft/returning-array-parameters-from-stored-procedures
正如假设的那样,它用于设置可以从过程调用中 returned 的记录数量限制。
该过程的定义表明它return将 2 个数组作为输出,因此如果其中任何一个超出结果集参数中设置的限制,将引发错误。