我有PL/SQL代碼:在C#中使用PL/SQL ASSOC數組索引由VARCHAR2
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;
CONTROLE代碼來檢查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:語句忽略」
這是一種特殊情況,當我使用ASSOC陣列由VARCHAR2索引。 當我更改索引由返回類型包在整數(註釋掉行代碼id包),一切正常。
你知道如何在C#中使用這個包嗎?
感謝的
上次我檢查了ODP.NET(10.2),它無法處理'varchar2'索引的集合。我懷疑它隨着時間而改變。 (順便說一下,我喜歡那個「riadok」和「stĺpec」。:-)) – nop77svk 2014-10-10 07:57:22