【发布时间】:2019-07-24 11:19:23
【问题描述】:
我很高兴使用 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,现在它再次成为我手表上的一个问题。
与其追随我前任的脚步并随意增加它,我想尽可能多地了解此功能,但我很难找到有关它的任何文档。
这个特性/参数/参数是否有一个特定的名称?知道这应该足以让我找到更多关于它的信息,但只需简要说明或链接到它的文档会有优势的。
从 cmets / answers 很明显,定义被调用的过程可能很有用:
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)
【问题讨论】:
-
我认为了解您使用的数据库引擎在这里可能比开发语言更有用,因为它似乎与
call procedure参数非常相关 -
感谢@OlivierDepriester,为问题添加了详细信息。
-
抱歉,您用来连接 Oracle 的连接提供程序似乎也很重要:我发现一些文章说如果您使用 OraOLEDB.Oracle,则不应将此参数绑定到调用。您必须在连接字符串中包含它
-
道歉@OlivierDepriester,这里的术语有时会让我感到困惑,您是否在寻找我使用的驱动程序:'Microsoft ODBC for Oracle'(通过 ODBC 数据源管理器找到)
标签: oracle asp-classic odbc ado terminology