Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. How to use user-defined-type input and output parameters in Oracle Function using ODP.NET

How to use user-defined-type input and output parameters in Oracle Function using ODP.NET

Scheduled Pinned Locked Moved C#
helpcsharpdatabaseoraclesysadmin
6 Posts 3 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    AnilJayanti
    wrote on last edited by
    #1

    Hi, I'm facing the problem when i'm executing the oracle function with input and output parameters which are object type. i givng my code below. I created two types for input and output parameter for a functions. type get1 as object(deptno number(5))NOT FINAL; TYPE GET2 AS OBJECT(DNAME VARCHAR2(14),LOC VARCHAR2(13))NOT FINAL; ///Function code : function getdata(id in get1,data out get2) return varchar2 is retval varchar(10); begin select get2(dname,loc) into data from dept where deptno = get1.deptno; retval := 'Result'; return retval; end; ///My .net code : OracleConnection con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.2.3)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLE)));User Id=scott;Password=tiger"); OracleCommand cmd = new OracleCommand("getdata", con); cmd.CommandType = CommandType.StoredProcedure; GET1 objget1 = new GET1(); GET2 objget2 = new GET2(); objget1.DEPTNO = 10; GET2[] get22 = null; OracleParameter outparam = new OracleParameter(); outparam.OracleDbType = OracleDbType.Object; outparam.Direction = ParameterDirection.Output; outparam.ParameterName = "data"; outparam.UdtTypeName = "GET2"; outparam.Value = objget2; OracleParameter inparam = new OracleParameter(); inparam.OracleDbType = OracleDbType.Object; inparam.Direction = ParameterDirection.Input; inparam.ParameterName = "id"; inparam.UdtTypeName = "GET1"; inparam.Value = 10; con.Open(); cmd.ExecuteNonQuery(); when i'm executing the below error is coming. "ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'GET_DATA_NEW'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored" Pls help me.

    N A 2 Replies Last reply
    0
    • A AnilJayanti

      Hi, I'm facing the problem when i'm executing the oracle function with input and output parameters which are object type. i givng my code below. I created two types for input and output parameter for a functions. type get1 as object(deptno number(5))NOT FINAL; TYPE GET2 AS OBJECT(DNAME VARCHAR2(14),LOC VARCHAR2(13))NOT FINAL; ///Function code : function getdata(id in get1,data out get2) return varchar2 is retval varchar(10); begin select get2(dname,loc) into data from dept where deptno = get1.deptno; retval := 'Result'; return retval; end; ///My .net code : OracleConnection con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.2.3)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLE)));User Id=scott;Password=tiger"); OracleCommand cmd = new OracleCommand("getdata", con); cmd.CommandType = CommandType.StoredProcedure; GET1 objget1 = new GET1(); GET2 objget2 = new GET2(); objget1.DEPTNO = 10; GET2[] get22 = null; OracleParameter outparam = new OracleParameter(); outparam.OracleDbType = OracleDbType.Object; outparam.Direction = ParameterDirection.Output; outparam.ParameterName = "data"; outparam.UdtTypeName = "GET2"; outparam.Value = objget2; OracleParameter inparam = new OracleParameter(); inparam.OracleDbType = OracleDbType.Object; inparam.Direction = ParameterDirection.Input; inparam.ParameterName = "id"; inparam.UdtTypeName = "GET1"; inparam.Value = 10; con.Open(); cmd.ExecuteNonQuery(); when i'm executing the below error is coming. "ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'GET_DATA_NEW'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored" Pls help me.

      N Offline
      N Offline
      Nagy Vilmos
      wrote on last edited by
      #2

      Try the database forum to start with. Oh and change the userid and password on the database. scott/tiger should never be used - it is the first user anyone would try on an oracle db.


      Panic, Chaos, Destruction. My work here is done.

      1 Reply Last reply
      0
      • A AnilJayanti

        Hi, I'm facing the problem when i'm executing the oracle function with input and output parameters which are object type. i givng my code below. I created two types for input and output parameter for a functions. type get1 as object(deptno number(5))NOT FINAL; TYPE GET2 AS OBJECT(DNAME VARCHAR2(14),LOC VARCHAR2(13))NOT FINAL; ///Function code : function getdata(id in get1,data out get2) return varchar2 is retval varchar(10); begin select get2(dname,loc) into data from dept where deptno = get1.deptno; retval := 'Result'; return retval; end; ///My .net code : OracleConnection con = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.2.3)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=ORACLE)));User Id=scott;Password=tiger"); OracleCommand cmd = new OracleCommand("getdata", con); cmd.CommandType = CommandType.StoredProcedure; GET1 objget1 = new GET1(); GET2 objget2 = new GET2(); objget1.DEPTNO = 10; GET2[] get22 = null; OracleParameter outparam = new OracleParameter(); outparam.OracleDbType = OracleDbType.Object; outparam.Direction = ParameterDirection.Output; outparam.ParameterName = "data"; outparam.UdtTypeName = "GET2"; outparam.Value = objget2; OracleParameter inparam = new OracleParameter(); inparam.OracleDbType = OracleDbType.Object; inparam.Direction = ParameterDirection.Input; inparam.ParameterName = "id"; inparam.UdtTypeName = "GET1"; inparam.Value = 10; con.Open(); cmd.ExecuteNonQuery(); when i'm executing the below error is coming. "ORA-06550: line 1, column 7:\nPLS-00306: wrong number or types of arguments in call to 'GET_DATA_NEW'\nORA-06550: line 1, column 7:\nPL/SQL: Statement ignored" Pls help me.

        A Offline
        A Offline
        ABitSmart
        wrote on last edited by
        #3

        Wouldn't you want to add the parameters you have created to the command before executing it ?

        cmd.Parameters.Add(outparam);
        cmd.Parameters.Add(inparam);

        As I have mentioned before[^], take a look at this [^]

        A 1 Reply Last reply
        0
        • A ABitSmart

          Wouldn't you want to add the parameters you have created to the command before executing it ?

          cmd.Parameters.Add(outparam);
          cmd.Parameters.Add(inparam);

          As I have mentioned before[^], take a look at this [^]

          A Offline
          A Offline
          AnilJayanti
          wrote on last edited by
          #4

          Ohh Sorry, thnxs for reply me. I forgot to paste that lines . Now i applied that applied then another errors is coming. function GETDATA(id in GET1,data out GET2) return varchar2 is retval varchar(10); begin select GET2(dname,loc) into data from dept where deptno = GET1.deptno; retval := 'Result'; return retval; end; OracleCommand cmd = new OracleCommand("GETDATA", con); cmd.CommandType = CommandType.StoredProcedure; GET1 objget1 = new GET1(); GET2 objget2 = new GET2(); objget1.DEPTNO = 10; objget1.DEPTNOIsNull = false; //GET2[] get22 = null; OracleParameter retval = new OracleParameter(); retval.OracleDbType = OracleDbType.Varchar2; retval.ParameterName = "retval"; retval.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(retval); OracleParameter inparam = new OracleParameter(); inparam.OracleDbType = OracleDbType.Object; inparam.Direction = ParameterDirection.Input; inparam.ParameterName = "id"; inparam.UdtTypeName = "GET1"; inparam.Value = objget1; cmd.Parameters.Add(inparam); OracleParameter outparam = new OracleParameter(); outparam.OracleDbType = OracleDbType.Object; outparam.Direction = ParameterDirection.Output; outparam.ParameterName = "data"; outparam.UdtTypeName = "GET2"; outparam.Value = objget2; cmd.Parameters.Add(outparam); con.Open(); cmd.ExecuteNonQuery(); Error like "ORA-03113: end-of-file on communication channel\nProcess ID: 0\nSession ID: 20 Serial number: 25". pls help.

          A 1 Reply Last reply
          0
          • A AnilJayanti

            Ohh Sorry, thnxs for reply me. I forgot to paste that lines . Now i applied that applied then another errors is coming. function GETDATA(id in GET1,data out GET2) return varchar2 is retval varchar(10); begin select GET2(dname,loc) into data from dept where deptno = GET1.deptno; retval := 'Result'; return retval; end; OracleCommand cmd = new OracleCommand("GETDATA", con); cmd.CommandType = CommandType.StoredProcedure; GET1 objget1 = new GET1(); GET2 objget2 = new GET2(); objget1.DEPTNO = 10; objget1.DEPTNOIsNull = false; //GET2[] get22 = null; OracleParameter retval = new OracleParameter(); retval.OracleDbType = OracleDbType.Varchar2; retval.ParameterName = "retval"; retval.Direction = ParameterDirection.ReturnValue; cmd.Parameters.Add(retval); OracleParameter inparam = new OracleParameter(); inparam.OracleDbType = OracleDbType.Object; inparam.Direction = ParameterDirection.Input; inparam.ParameterName = "id"; inparam.UdtTypeName = "GET1"; inparam.Value = objget1; cmd.Parameters.Add(inparam); OracleParameter outparam = new OracleParameter(); outparam.OracleDbType = OracleDbType.Object; outparam.Direction = ParameterDirection.Output; outparam.ParameterName = "data"; outparam.UdtTypeName = "GET2"; outparam.Value = objget2; cmd.Parameters.Add(outparam); con.Open(); cmd.ExecuteNonQuery(); Error like "ORA-03113: end-of-file on communication channel\nProcess ID: 0\nSession ID: 20 Serial number: 25". pls help.

            A Offline
            A Offline
            ABitSmart
            wrote on last edited by
            #5

            Does a simple query work ?? i suspect this to be some connection problem. i have no other clue :(

            A 1 Reply Last reply
            0
            • A ABitSmart

              Does a simple query work ?? i suspect this to be some connection problem. i have no other clue :(

              A Offline
              A Offline
              AnilJayanti
              wrote on last edited by
              #6

              Thanxs for reply, Is any wrong in my code or functions code? then can u pls tell me a simple functions with object type parameters and c# code. anil.

              1 Reply Last reply
              0
              Reply
              • Reply as topic
              Log in to reply
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes


              • Login

              • Don't have an account? Register

              • Login or register to search.
              • First post
                Last post
              0
              • Categories
              • Recent
              • Tags
              • Popular
              • World
              • Users
              • Groups