Stored procedures 使用经典asp从oracle 11g存储过程返回结果集

Stored procedures 使用经典asp从oracle 11g存储过程返回结果集,stored-procedures,asp-classic,oracle11g,Stored Procedures,Asp Classic,Oracle11g,我们最近从Oracle 10g升级到了11g,现在microsoft提供商MSDAORA.1将不起作用。我已经改为使用OraOLEDB.Oracle提供程序,但是现在我的一个返回结果集的存储过程也不起作用了 旧电话: strSQL=“{call SYSADM.lss\u pkg\u catalog\u page.get\u catalog\u page(?,{resultset 100,lss\u media\u cd,lss\u page\u num})” 因此,我一直试图将其更改为返回参数值

我们最近从Oracle 10g升级到了11g,现在microsoft提供商MSDAORA.1将不起作用。我已经改为使用
OraOLEDB.Oracle
提供程序,但是现在我的一个返回结果集的存储过程也不起作用了

旧电话: strSQL=“{call SYSADM.lss\u pkg\u catalog\u page.get\u catalog\u page(?,{resultset 100,lss\u media\u cd,lss\u page\u num})”

因此,我一直试图将其更改为返回参数值,但我不断收到以下错误:
错误:-2147217900-ORA-06550:第1行第7列:PLS-00306:调用“GET_CATALOG_XXX”ORA-06550:第1行时参数的数量或类型错误,第7列:PLS-00306:调用“GET_CATALOG_XXX”时参数的数量或类型错误ORA-06550:第1行,第7列:PL/SQL:语句被忽略

我猜这是因为我的输出参数的数据类型,但似乎找不到正确的类型来使用

以下是我正在使用的代码:

dim con, rst1, prm1, prm2, prm3, prm4

set cmCmd = Server.CreateObject("ADODB.Command")
set con = Server.CreateObject("ADODB.Connection")
Set Rst1 = Server.CreateObject("ADODB.Recordset")

Con.Provider = "OraOLEDB.Oracle"
Con.ConnectionString = "Data Source=XXXXXX;Password=XXXXXX;User ID=XXXXX;Persist Security Info=True"
Con.Open

cmCmd.ActiveConnection = Con
cmCmd.CommandType = adCmdText

Set Prm1 = cmCmd.CreateParameter("PRODUCT_ID", adVarChar, adParamInput, 20, strTempProductID)
cmCmd.Parameters.Append Prm1                                

Set Prm2 = cmCmd.CreateParameter("LSS_MEDIA_XX", adVarWChar, adParamOutput, 100) 
cmCmd.Parameters.Append Prm2                

Set Prm3 = cmCmd.CreateParameter("LSS_PAGE_XXX", adVarWChar, adParamOutput, 100) 
cmCmd.Parameters.Append Prm3 

strSql = "{ CALL SYSADM.lss_pkg_catalog_pages.get_catalog_pages(?, ?, ?) }" 

cmCmd.CommandText = strSql
cmCmd.Execute 
我还有其他直接的SQL和其他存储过程调用,它们返回的数据很好,只是这个存储过程工作不正常

编辑: 我被问及Oracle存储过程中的类型声明:

TYPE t_lss_media_XXX is TABLE of ps_lss_cat_XXXX.lss_XXX%TYPE
          INDEX BY BINARY_INTEGER;

TYPE t_lss_page_XXX is TABLE of ps_lss_cat_XXXX.lss_XXXX%TYPE
           INDEX BY BINARY_INTEGER;
如果有更多的信息需要从商店程序让我知道,我可以张贴它

如有任何建议,将不胜感激


感谢Robert

在@searchAnResQ的评论中提出的建议,我让我们的oracle团队重做存储过程以返回一个Ref游标,这似乎起到了作用。我发现我们正在使用的ODAC版本不支持返回表。

请查看OTN的此链接:我查看了该网站,特别是
PLSQLRSet
上的部分,甚至复制了代码并根据我的情况对其进行了修改,但仍然会得到相同的错误。您能显示修改后的代码吗?你可以编辑你的问题。。。正如这个链接所示,你能将这两个游标的类型改为ref_游标吗?代码示例就是我正在使用的代码,它是从那个站点复制的,并且经过修改以满足我的需要。