【问题标题】:Return resultset from oracle 11g stored procedure using classic asp使用经典 asp 从 oracle 11g 存储过程返回结果集
【发布时间】:2012-11-09 19:16:32
【问题描述】:

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

旧电话: strSQL = "{call SYSADM.lss_pkg_catalog_pages.get_catalog_pages(?,{resultset 100, lss_media_cd, lss_page_num})}"

所以我一直在尝试将其更改为返回参数值,但我不断收到以下错误:Error: -2147217900 - ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'GET_CATALOG_XXX' ORA-06550: line 1, column 7: PLS-00306: wrong number or types of arguments in call to 'GET_CATALOG_XXX' ORA-06550: line 1, column 7: PL/SQL: Statement ignored

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

这是我正在使用的代码:

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;

如果商店过程中需要更多信息,请告诉我,我可以发布。

任何建议将不胜感激。

谢谢罗伯特

【问题讨论】:

  • 我查看了该站点,特别是 PLSQLRSet 上的部分,甚至复制了代码并针对我的情况进行了修改,但仍然出现相同的错误。
  • 你能显示修改后的代码吗?你可以编辑你的问题。
  • .. 而且,正如该链接所示,您可以将这两者的类型更改为 ref_cursors 吗?
  • 代码示例是我正在使用的代码,它是从该站点复制并修改以满足我的需要。

标签: stored-procedures asp-classic oracle11g


【解决方案1】:

根据 @searchAnResQ 在 cmets 中的建议,我让我们的 oracle 团队重做存储过程以返回 Ref Cursor,这似乎可以解决问题。我发现我们正在使用的 ODAC 版本不支持返回表。

【讨论】:

    猜你喜欢
    • 2017-06-23
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多