C# Passing Associative Arrays to PL/SQL Code
2010-08-08 13:39
363 查看
CREATE OR REPLACE PACKAGE ProductsPackage IS
TYPE DecimalArray IS TABLE OF DECIMAL INDEX BY BINARY_INTEGER;
TYPE StringArray IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
PROCEDURE proc_UpdateMultiplePrices(ProdPrices IN DecimalArray, ProdNames IN
StringArray);
END ProductsPackage;
/
CREATE OR REPLACE PACKAGE BODY ProductsPackage IS
PROCEDURE proc_UpdateMultiplePrices(ProdPrices IN DecimalArray, ProdNames IN
StringArray)
IS
BEGIN
FOR i IN 1..ProdNames.LAST
LOOP
UPDATE Products SET Price = Price + ProdPrices(i) WHERE Name =
ProdNames(i);
END LOOP;
END;
END ProductsPackage;
/
private void btnUpdateMultiplePrices_Click(object sender, EventArgs e)
{
String _connstring = "Data Source=localhost/NEWDB;User
Id=EDZEHOO;Password=PASS123;";
try
{ OracleConnection _connObj = new OracleConnection(_connstring);
_connObj.Open();
OracleCommand _cmdObj = _connObj.CreateCommand();
_cmdObj.CommandText = "ProductsPackage.proc_UpdateMultiplePrices";
_cmdObj.CommandType = CommandType.StoredProcedure;
OracleParameter _priceParam = new OracleParameter();
_priceParam.ParameterName = "ProdPrices";
_priceParam.OracleDbType = OracleDbType.Decimal;
_priceParam.Direction = ParameterDirection.Input;
_priceParam.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Decimal [] decArray= new Decimal[3];
decArray[0] = 100;
decArray[1] = 300;
decArray[2] = 500;
_priceParam.Value = decArray;
_cmdObj.Parameters.Add(_priceParam);
OracleParameter _NameParam = new OracleParameter();
_NameParam.ParameterName = "ProdNames";
_NameParam.OracleDbType = OracleDbType.Varchar2;
_NameParam.Direction = ParameterDirection.Input;
_NameParam.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
String[] stringArray = new String[3];
stringArray[0] = "Engine";
stringArray[1] = "Windshield";
stringArray[2] = "Rear Lights";
_NameParam.Value = stringArray;
_cmdObj.Parameters.Add(_NameParam);
_cmdObj.ExecuteNonQuery(); MessageBox.Show("All products updated!");
_connObj.Close();
_connObj.Dispose();
_connObj = null;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
TYPE DecimalArray IS TABLE OF DECIMAL INDEX BY BINARY_INTEGER;
TYPE StringArray IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
PROCEDURE proc_UpdateMultiplePrices(ProdPrices IN DecimalArray, ProdNames IN
StringArray);
END ProductsPackage;
/
CREATE OR REPLACE PACKAGE BODY ProductsPackage IS
PROCEDURE proc_UpdateMultiplePrices(ProdPrices IN DecimalArray, ProdNames IN
StringArray)
IS
BEGIN
FOR i IN 1..ProdNames.LAST
LOOP
UPDATE Products SET Price = Price + ProdPrices(i) WHERE Name =
ProdNames(i);
END LOOP;
END;
END ProductsPackage;
/
private void btnUpdateMultiplePrices_Click(object sender, EventArgs e)
{
String _connstring = "Data Source=localhost/NEWDB;User
Id=EDZEHOO;Password=PASS123;";
try
{ OracleConnection _connObj = new OracleConnection(_connstring);
_connObj.Open();
OracleCommand _cmdObj = _connObj.CreateCommand();
_cmdObj.CommandText = "ProductsPackage.proc_UpdateMultiplePrices";
_cmdObj.CommandType = CommandType.StoredProcedure;
OracleParameter _priceParam = new OracleParameter();
_priceParam.ParameterName = "ProdPrices";
_priceParam.OracleDbType = OracleDbType.Decimal;
_priceParam.Direction = ParameterDirection.Input;
_priceParam.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
Decimal [] decArray= new Decimal[3];
decArray[0] = 100;
decArray[1] = 300;
decArray[2] = 500;
_priceParam.Value = decArray;
_cmdObj.Parameters.Add(_priceParam);
OracleParameter _NameParam = new OracleParameter();
_NameParam.ParameterName = "ProdNames";
_NameParam.OracleDbType = OracleDbType.Varchar2;
_NameParam.Direction = ParameterDirection.Input;
_NameParam.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
String[] stringArray = new String[3];
stringArray[0] = "Engine";
stringArray[1] = "Windshield";
stringArray[2] = "Rear Lights";
_NameParam.Value = stringArray;
_cmdObj.Parameters.Add(_NameParam);
_cmdObj.ExecuteNonQuery(); MessageBox.Show("All products updated!");
_connObj.Close();
_connObj.Dispose();
_connObj = null;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
相关文章推荐
- C# Retrieving Associative Arrays from PL/SQL Code
- Passing Managed Structures With Arrays To Unmanaged Code Part 2
- Passing Managed Structures With Arrays To Unmanaged Code Part 1
- Passing Managed Structures With Arrays To Unmanaged Code Part 3
- PL/SQL Associative Arrays
- ORA-04031: unable to allocate 4096 bytes of shared memory ("shared pool","BEGIN :EXEC_STR := SYS.DBMS...","PL/SQL MPCODE","BAMIM
- Passing an ARRAY from Java to PL/SQL
- ODP.NET与复杂的PL/SQL数据类型(Using ODP.NET To Deal With Complex PLSQL Data Types)
- Uses DBMS_DDL.CREATE_WRAPPED to obfuscate PL/SQL source
- 6 Best Tools to Help You Convert Java to C# Source Code
- How to use PL SQL Developer in Ubuntu
- Talk about how to write good C# code from a bug
- How To Merge Two FlowDocument Objects Using C# Code[WPF]
- PL/SQL的TO_CHAR()与TO_DATE()
- PL/SQL的TO_CHAR()与TO_DATE()
- Beginning C# Objects From Concepts to Code
- c#对PL/SQL查询结果列复制的结果生成指定格式
- Resetting an Associative array in PL/SQL?
- How to make a callback to C# from C/C++ code
- c# Linq to sql 基本查询例子