小助手科技_小程序定制开发图片

小助手科技_小程序定制开发图片

小助手科技_小程序定制开发图片

小助手科技_小程序定制开发图片

小助手科技_小程序定制开发图片

C#调用oracle中带数组的存储过程

作者:
来源:
时间: Aug 19, 2020
当前位置:  小助手科技 > 资讯 > C#调用oracle中带数组的存储过程

--存储过程

CREATE OR REPLACE PACKAGE pg_test IS
TYPE idArrayPg is table of integer index by BINARY_INTEGER;

 PROCEDURE p_test(ids   IN idArrayPg
     );

END pg_test;

CREATE OR REPLACE PACKAGE BODY pg_test IS
 PROCEDURE p_test(ids   IN idArrayPg
     ) AS
  l_index number;
 BEGIN
  l_index:= ids.first;--使用first方法
       loop
                     dbms_output.put_line(l_index ||':'|| ids(l_index));
       exit when l_index = ids.LAST;
              l_index :=ids.next(l_index);
       end loop;
 END p_test;

END pg_test;


--pl/sql测试程序

declare
  ig_test.idarrads pypg;

begin
  ids(1) := 1;
    ids(2) := 2;
  ids(3) := 3;

pg_test.p_test(ids => ids);
end;


//C#中调用

cmd = new OracleCommand("pg_test.p_test", con);

cmd.CommandType = CommandType.StoredProcedure;OracleParameter param1 = cmd.Parameters.Add("param1", OracleDbType.Int32);

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

param1.Direction = ParameterDirection.Input;pg_test.p_test", con);

cmd.CommandType = CommandType.StoredProcedure;OracleParameter param1 = cmd.Parameters.Add("param1", OracleDbType.Int32);

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

param1.Direction = ParameterDirection.Input;


<strong>param1.Value = new Int[3]{1,2,3};</strong>


param1.Size = 3;cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();


<strong>上述代码经测试,运行正确.</strong>


<strong>注:</strong>


<strong>在项目开发过程中,曾试图将数组定义为:</strong>


TYPE idArrayPg is table of integer;

在C#中调用存在问题,但在JAVA中调用正常.至于如何在C#中调用定义的数组不带index by BINARY_INTEGER,目前还未找到解决方案.


上一篇: oracle 版本、用户数

想了解更多?现在就开始免费体验

请您留言
深圳市小助手科技有限公司
0755-82494862
小助手科技_姓名图片
小助手科技_电话图片
小助手科技_邮箱图片
类型咨询类型
小助手科技_类型图片
180 0250 1799(微信同号)
0755-8249 4862
深圳市福田区泰然八路18号安华工业园6栋705室
QQ交谈 QQ交谈
友情链接:
网站地图
Copyright 2014-2020 深圳市小助手科技有限公司-版权所有
ICP备案号:粤ICP备15072167号-1