<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="http://syndication.webwiz.co.uk/rss_namespace/">
 <channel>
  <title>DevForce Community Forum : Oracle Stored Procedure Example (NOT a Ref Cursor)</title>
  <link>http://www.ideablade.com/forum/</link>
  <description>This is an XML content feed of; DevForce Community Forum : DevForce 2009 : Oracle Stored Procedure Example (NOT a Ref Cursor)</description>
  <pubDate>Sat, 11 Apr 2026 07:19:28 -700</pubDate>
  <lastBuildDate>Tue, 07 Jul 2009 07:34:13 -700</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 9.69</generator>
  <ttl>360</ttl>
  <WebWizForums:feedURL>www.ideablade.com/forum/RSS_post_feed.asp?TID=1363</WebWizForums:feedURL>
  <image>
   <title>DevForce Community Forum</title>
   <url>http://www.ideablade.com/forum/forum_images/IdeaBlade_logo_tm.png</url>
   <link>http://www.ideablade.com/forum/</link>
  </image>
  <item>
   <title>Oracle Stored Procedure Example (NOT a Ref Cursor) : I need to call an Oracle stored...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=1363&amp;PID=4913#4913</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=308" rel="nofollow">skingaby</a><br /><strong>Subject:</strong> 1363<br /><strong>Posted:</strong> 07-Jul-2009 at 7:34am<br /><br />I need to call an Oracle stored procedure that takes one INPUT parameter and returns one OUTPUT parameter.  There are no Entities involved so the Entity Framework (and consequently the DevForce model, will not help).<br />I tried to follow the largely undocumented RdbKey functionality, but was unsuccessful because no matter what I tried, then I called AdoHelper(RdbKey) I got an AdoHelper configured for Sql Server.  Grrr.<br />I finally worked around it as shown below. <br />(Note:  I am using the Devart dotConnect for Oracle drivers.)<br /><br />Here is the proc I need to call.  It is contained inside a Package on Oracle.<br /><br /><table width="99%"><tr><td><pre class="BBcode">PACKAGE PKG_FUNCTIONS AS<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PROCEDURE GetNextSequenceValue(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sequence_name IN VARCHAR,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next_val OUT NUMBER);<br /><br />END PKG_FUNCTIONS;<br /><br />PACKAGE BODY PKG_FUNCTIONS AS<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;PROCEDURE GetNextSequenceValue(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sequence_name IN VARCHAR,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; next_val OUT NUMBER)<br />&nbsp;&nbsp;&nbsp;&nbsp;IS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select_stmt VARCHAR(200);<br />&nbsp;&nbsp;&nbsp;&nbsp;BEGIN<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; EXECUTE IMMEDIATE CONCAT('select ' , CONCAT(sequence_name , '.NEXTVAL from dual'))<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;INTO next_val;<br />&nbsp;&nbsp;&nbsp;&nbsp;END;<br /><br />END PKG_FUNCTIONS;</pre></td></tr></table><br /><br />After refactoring my working example, I ended up with a new DbHelper  class that takes care of configuring the connection and returning the ADO objects I need to execute the procedure.<br /><br /><table width="99%"><tr><td><pre class="BBcode">class DbHelper<br />{<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;private static Devart.Data.Oracle.OracleProviderFactory _factory = new Devart.Data.Oracle.OracleProviderFactory();<br />&nbsp;&nbsp;&nbsp;&nbsp;private static RdbKey _configRdbKey;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;static DbHelper()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var config = IdeaBlade.Core.IdeaBladeConfig.Instance;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var keyElement = config.EdmKeys&#091;0&#093;;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var key = new EdmKey(keyElement);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_configRdbKey = (RdbKey)key.RdbKey;<br />&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static Devart.Data.Oracle.OracleProviderFactory DbFactory<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return _factory;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbConnection CreateConnection()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cn = DbFactory.CreateConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cn.ConnectionString = _configRdbKey.ConnectionString;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return cn;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbCommand CreateCommand(DbConnection cn)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cmd = DbFactory.CreateCommand();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.Connection = cn;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return cmd;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbCommand CreateCommand(DbConnection cn, string commandText)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cmd = CreateCommand(cn);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandText = commandText;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return cmd;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbCommand CreateCommand(DbConnection cn, string commandText,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Data.CommandType commandType)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var cmd = CreateCommand(cn, commandText);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cmd.CommandType = commandType;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return cmd;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbParameter CreateParameter()<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parm = DbFactory.CreateParameter();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parm;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbParameter CreateParameter(string name)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parm = CreateParameter();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parm.ParameterName = name;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parm;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbParameter CreateParameter(string name,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Data.DbType type)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parm = CreateParameter(name);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parm.DbType = type;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parm;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbParameter CreateParameter(string name,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Data.DbType type, System.Data.ParameterDirection direction)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parm = CreateParameter(name, type);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parm.Direction = direction;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parm;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;public static DbParameter CreateParameter(string name,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.Data.DbType type, System.Data.ParameterDirection direction, object value)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var parm = CreateParameter(name, type, direction);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parm.Value = value;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return parm;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />}</pre></td></tr></table><br /><br />The method to actually execute the stored procedure, then looks like this:<br /><table width="99%"><tr><td><pre class="BBcode">public static long GetNextSequenceValue(string sequenceName)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;var cn = DbHelper.CreateConnection();<br />&nbsp;&nbsp;&nbsp;&nbsp;var cmd = DbHelper.CreateCommand(cn, "PKG_GCSAG_FUNCTIONS.GETNEXTSEQUENCEVALUE", CommandType.StoredProcedure);<br />&nbsp;&nbsp;&nbsp;&nbsp;var parm = DbHelper.CreateParameter("SEQUENCE_NAME", DbType.String, ParameterDirection.Input, sequenceName );<br />&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(parm);<br />&nbsp;&nbsp;&nbsp;&nbsp;parm = DbHelper.CreateParameter("NEXT_VAL", DbType.Int64, ParameterDirection.Output);<br />&nbsp;&nbsp;&nbsp;&nbsp;cmd.Parameters.Add(parm);<br />&nbsp;&nbsp;&nbsp;&nbsp;cn.Open();<br />&nbsp;&nbsp;&nbsp;&nbsp;cmd.ExecuteNonQuery();<br />&nbsp;&nbsp;&nbsp;&nbsp;var retval = Decimal.ToInt64((Decimal)cmd.Parameters&#091;1&#093;.Value);<br />&nbsp;&nbsp;&nbsp;&nbsp;cn.Close();<br />&nbsp;&nbsp;&nbsp;&nbsp;return retval;<br />}</pre></td></tr></table><br />]]>
   </description>
   <pubDate>Tue, 07 Jul 2009 07:34:13 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=1363&amp;PID=4913#4913</guid>
  </item> 
 </channel>
</rss>