【发布时间】:2014-10-10 07:51:24
【问题描述】:
我有 PL/SQL 代码:
create or replace
package TEST_PKG2 as
type AssocArray is table of varchar2(20) index by binary_integer;
type AssocArray_varchar is table of varchar2(20) index by varchar2(10);
--type AssocArray_varchar is table of varchar2(20) index by integer;
function assoc_arry_return(Param1 in AssocArray) return AssocArray_varchar;
end TEST_PKG2;
create or replace
package body TEST_PKG2 as
function assoc_arry_return(Param1 in AssocArray) return AssocArray_varchar
is
v_return_value AssocArray_varchar;
begin
v_return_value('name1'):=Param1(1);
v_return_value('name2'):=Param1(2);
v_return_value('name3'):=Param1(3);
return v_return_value;
end assoc_arry_return;
end TEST_PKG2;
控制代码检查 pl/sql:
set serveroutput on
declare
assoc_array test_pkg2.AssocArray;
assoc_array_return test_pkg2.AssocArray_varchar;
begin
assoc_array(1):='test1';
assoc_array(2):='test2';
assoc_array(3):='test3';
assoc_array_return:= test_pkg2.assoc_arry_return(assoc_array);
dbms_output.put_line(assoc_array_return.first||' - '||assoc_array_return(assoc_array_return.first));
end;
以及用于执行此功能的 C# 代码:
command = new OracleCommand("TEST_PKG2.assoc_arry_return", OracleConnection);
command.CommandType = CommandType.StoredProcedure;
OracleParameter return_value = new OracleParameter();
return_value.OracleDbType = OracleDbType.Varchar2;
return_value.Direction = ParameterDirection.ReturnValue;
return_value.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
return_value.Size=3;
return_value.ArrayBindSize = new int[3] { 20, 20, 20 };
command.Parameters.Add(return_value);
OracleParameter Param4 = command.Parameters.Add("Param1", OracleDbType.Varchar2);
Param4.Direction = ParameterDirection.Input;
Param4.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Param4.Value = new string[3] { "First Element", "Second Element", "Third Element" };
Param4.Size = 3;
Param4.ArrayBindSize = new int[3] { 20, 20, 20 };
Param4.ArrayBindStatus = new OracleParameterStatus[3] { OracleParameterStatus.Success, OracleParameterStatus.Success, OracleParameterStatus.Success };
command.ExecuteNonQuery();
当我使用 thic 代码执行应用程序时,执行在最后一行终止并出现错误“ORA-06550:第 1 行,第 15 列: PLS-00382:表达式类型错误 ORA-06550:第 1 行,第 7 列: PL/SQL:语句被忽略”
这是一个特殊情况,当我使用由 varchar2 索引的 assoc 数组时。 当我在整数包中更改返回类型的索引时(注释掉行代码 id 包),一切正常。
你知道如何在 C# 中使用这个包吗?
谢谢
【问题讨论】:
-
上次我检查 ODP.NET (10.2) 时,它无法处理
varchar2-indexed 集合。我不知何故怀疑它会随着时间而改变。 (顺便说一句。我喜欢那个“riadok”和“stĺpec”。:-))