我们最近从Oracle 10g升级到11g,现在微软提供商MSDAORA.1将无法运行.我已经改为使用OraOLEDB.Oracle提供程序,但现在我的一个返回结果集的存储过程也无法正常工作.
旧电话:
strSQL =“{call SYSADM.lss_pkg_catalog_pages.get_catalog_pages(?,{resultset 100,lss_media_cd,lss_page_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",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;
如果商店程序中有更多必要信息,请告诉我,我可以发布.
任何建议将不胜感激.
谢谢罗伯特
解决方法
根据@searchAnResQ在评论中的建议,我让我们的oracle团队重做存储过程以返回Ref Cursor,这似乎可以解决问题.我发现我们正在使用的ODAC版本不支持返回表.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。