oracle internal_function,Data provider internal error(-3001)

Hi Vincent,

1) ODP.NET supports binding of PL/SQL associative arrays but it's single-dimensional.

2) SP execution with default param value exmple is below:

using System;

using System.Data;

using System.Text;

using Oracle.DataAccess.Client;

using Oracle.DataAccess.Types;

namespace Sample

{

class Test

{

public static void WarningHandler(object src, OracleInfoMessageEventArgs args)

{

Console.WriteLine("Source object is: " + src.GetType().Name);

Console.WriteLine("InfoMessageArgs.Message is " + args.Message);

Console.WriteLine("InfoMessageArgs.Source is " + args.Source);

}

static void Main(string[] args)

{

string constr = "User Id=scott;Password=tiger;Data Source=inst1;";

OracleConnection con = new OracleConnection(constr);

con.Open();

con.InfoMessage += new OracleInfoMessageEventHandler(WarningHandler);

// Setup

Setup(con);

OracleCommand cmd = new OracleCommand("TEST.Def", con);

cmd.CommandType = CommandType.StoredProcedure;

OracleParameter oparam = cmd.Parameters.Add("empno_out", OracleDbType.Int32);

oparam.Direction = ParameterDirection.Output;

try

{

cmd.ExecuteNonQuery(); // ORA-06502: PL/SQL: numeric or value error

}

catch(Exception ex)

{

Console.WriteLine(ex);

}

int empno = (int)(oparam.Value);

Console.WriteLine("the empno for default ename of 'MARTIN' is : " + empno);

// Let's override the default value of MARTIN

OracleParameter oparam2 = cmd.Parameters.Add("ename_in", OracleDbType.Varchar2);

oparam2.Direction = ParameterDirection.Input;

oparam2.Value = "SMITH";

try

{

cmd.ExecuteNonQuery(); // ORA-06502: PL/SQL: numeric or value error

}

catch(Exception ex)

{

Console.WriteLine(ex);

}

empno = (int)(oparam.Value);

Console.WriteLine("the empno for default ename of 'SMITH' is : " + empno);

}

public static void Setup(OracleConnection con)

{

StringBuilder blr;

OracleCommand cmd = new OracleCommand("",con);

// Create Package Header

blr = new StringBuilder();

blr.Append("CREATE OR REPLACE PACKAGE TEST is ");

blr.Append("PROCEDURE Def (empno_out out NUMBER, name_in in VARCHAR2 default 'MARTIN'); ");

blr.Append("end TEST;");

cmd.CommandText = blr.ToString();

try

{

cmd.ExecuteNonQuery();

}

catch (Exception e)

{

Console.WriteLine("Error: {0}", e.Message);

}

// Create Package Body

blr = new StringBuilder();

blr.Append("create or replace package body TEST is ");

blr.Append("PROCEDURE Def (empno_out out NUMBER, name_in in VARCHAR2 default 'MARTIN') is ");

blr.Append("BEGIN ");

blr.Append("select empno into empno_out from emp where ename = name_in; ");

blr.Append("End Def; ");

blr.Append("end TEST; ");

cmd.CommandText = blr.ToString();

try

{

cmd.ExecuteNonQuery();

}

catch (Exception e)

{

Console.WriteLine("Error: {0}", e.Message);

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值