{"id":305,"date":"2009-02-17T23:14:29","date_gmt":"2009-02-17T22:14:29","guid":{"rendered":"http:\/\/bar-solutions.com\/wordpress\/?p=305"},"modified":"2009-02-17T23:14:29","modified_gmt":"2009-02-17T22:14:29","slug":"overloading-and-parameters","status":"publish","type":"post","link":"https:\/\/blog.bar-solutions.com\/?p=305","title":{"rendered":"Overloading and parameters"},"content":{"rendered":"<p>When you call a procedure or function in PL\/SQL you basically have two options for the parameters. By name or by position. If you use the <strong>by name<\/strong> version, then every parameter is named. You don\u2019t have to conform to the order of the parameters because <a title=\"Oracle 11g, Siebel, PeopleSoft | Oracle, The World&#39;s Largest Enterprise Software Company\" href=\"http:\/\/www.oracle.com\/\" target=\"_blank\">Oracle<\/a> will automatically put the value in the right variable. You can even mix both approaches, start with positional notation and then switch to named notation. Be aware though that you cannot switch back. Once you\u2019re using named notation you cannot go back to positional notation.<\/p>\n<p> <!--more-->  <\/p>\n<p>So when you create a program (procedure or function) and call this from another program you basically have three options. Consider the following procedure:<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"lnum\">   1:  <\/span><span class=\"kwrd\">create<\/span> <span class=\"kwrd\">or<\/span> replace <span class=\"kwrd\">procedure<\/span> parameter_usage<\/pre>\n<pre><span class=\"lnum\">   2:  <\/span>( parama_in <span class=\"kwrd\">in<\/span> pls_integer<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   3:  <\/span>, paramb_in <span class=\"kwrd\">in<\/span> pls_integer<\/pre>\n<pre><span class=\"lnum\">   4:  <\/span>, paramo_out <span class=\"kwrd\">out<\/span> pls_integer)<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   5:  <\/span><span class=\"kwrd\">is<\/span><\/pre>\n<pre><span class=\"lnum\">   6:  <\/span><span class=\"kwrd\">begin<\/span><\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   7:  <\/span>  paramo_out := parama_in * paramb_in;<\/pre>\n<pre><span class=\"lnum\">   8:  <\/span><span class=\"kwrd\">exception<\/span><\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   9:  <\/span>  <span class=\"kwrd\">when<\/span> others <span class=\"kwrd\">then<\/span> paramo_out := 0;  <\/pre>\n<pre><span class=\"lnum\">  10:  <\/span><span class=\"kwrd\">end<\/span> parameter_usage;<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<p>When this procedure is created I have three options to call it:<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"lnum\">   1:  <\/span><span class=\"kwrd\">declare<\/span><\/pre>\n<pre><span class=\"lnum\">   2:  <\/span>  la pls_integer;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   3:  <\/span>  lb pls_integer;<\/pre>\n<pre><span class=\"lnum\">   4:  <\/span>  loutcome pls_integer;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   5:  <\/span><span class=\"kwrd\">begin<\/span><\/pre>\n<pre><span class=\"lnum\">   6:  <\/span>  <span class=\"rem\">-- define the variables<\/span><\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   7:  <\/span>  la := 6;<\/pre>\n<pre><span class=\"lnum\">   8:  <\/span>  lb := 7;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   9:  <\/span>  <span class=\"rem\">-- call the procedure using positional notation<\/span><\/pre>\n<pre><span class=\"lnum\">  10:  <\/span>  parameter_usage(la, lb, loutcome);<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">  11:  <\/span>  dbms_output.put_line(loutcome);<\/pre>\n<pre><span class=\"lnum\">  12:  <\/span>  <span class=\"rem\">-- call the procedure using named notation<\/span><\/pre>\n<pre class=\"alt\"><span class=\"lnum\">  13:  <\/span>  parameter_usage(parama_in =&gt; la, paramb_in =&gt; lb, paramo_out =&gt; loutcome);<\/pre>\n<pre><span class=\"lnum\">  14:  <\/span>  dbms_output.put_line(loutcome);<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">  15:  <\/span>  <span class=\"rem\">-- call the procedure using mixed notation<\/span><\/pre>\n<pre><span class=\"lnum\">  16:  <\/span>  parameter_usage(la, lb, paramo_out =&gt; loutcome);<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">  17:  <\/span>  dbms_output.put_line(loutcome);  <\/pre>\n<pre><span class=\"lnum\">  18:  <\/span><span class=\"kwrd\">end<\/span>;<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<p>As you can see I can use use <strong>positional<\/strong>, <strong>named<\/strong> or <strong>mixed notation<\/strong>. They all lead to the same result. I think writing code that uses named notation increases the readability and understandability of the code. I can read the program that calls the procedure and just by looking at the call I can probably understand what the called program is supposed to do (if the parameter names are descriptive enough). <\/p>\n<p>Note that Oracle does not check the code that is being executed. If you have multiple (<a title=\"Building a Code-Analysis Utility and Doing It Right the First Time\" href=\"http:\/\/www.oracle.com\/technology\/oramag\/webcolumns\/2003\/techarticles\/feuerstein_codech.html\" target=\"_blank\" rel=\"nofollow\">non-ambiguous<\/a>) programs that can be executed then Oracle chooses the one where it needs to do as less implicit type casting as possible. You can of course use this behavior to make your coding efforts easier. For instance when you (like me) create a log package with lots of overloading of the add procedure (different parameter types, different number of parameters etc) you can just call the add procedure without worrying about what parameters to put in here. Oracle will figure out what procedure to call and this procedure will put the values in the right place in the database.<\/p>\n<p>Part of the package specification is like this:<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\">...<\/pre>\n<pre>  <span class=\"kwrd\">PROCEDURE<\/span> <span class=\"kwrd\">ADD<\/span>(<\/pre>\n<pre class=\"alt\">    message_in                     <span class=\"kwrd\">IN<\/span>      VARCHAR2<\/pre>\n<pre>  , value_date_in                  <span class=\"kwrd\">IN<\/span>      <span class=\"kwrd\">DATE<\/span> );<\/pre>\n<pre class=\"alt\">  <span class=\"kwrd\">PROCEDURE<\/span> <span class=\"kwrd\">ADD<\/span>(<\/pre>\n<pre>    message_in                     <span class=\"kwrd\">IN<\/span>      VARCHAR2<\/pre>\n<pre class=\"alt\">  , value_number_in                <span class=\"kwrd\">IN<\/span>      NUMBER );<\/pre>\n<pre>  <span class=\"kwrd\">PROCEDURE<\/span> <span class=\"kwrd\">ADD<\/span>(<\/pre>\n<pre class=\"alt\">    message_in                     <span class=\"kwrd\">IN<\/span>      VARCHAR2<\/pre>\n<pre>  , value_varchar2_in              <span class=\"kwrd\">IN<\/span>      VARCHAR2 );<\/pre>\n<pre class=\"alt\">...<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<div class=\"csharpcode\">In my code I can just call the add procedure and have it figure out what procedure to use:<\/div>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"lnum\">   1:  <\/span><span class=\"kwrd\">declare<\/span><\/pre>\n<pre><span class=\"lnum\">   2:  <\/span>  lnumber pls_integer;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   3:  <\/span>  lstring varchar2(100);<\/pre>\n<pre><span class=\"lnum\">   4:  <\/span>  ldate <span class=\"kwrd\">date<\/span>;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   5:  <\/span><span class=\"kwrd\">begin<\/span><\/pre>\n<pre><span class=\"lnum\">   6:  <\/span>  barlog.TurnLogOn;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   7:  <\/span>  lnumber := 42;<\/pre>\n<pre><span class=\"lnum\">   8:  <\/span>  lstring := <span class=\"str\">'Patrick'<\/span>;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   9:  <\/span>  ldate := to_date(<span class=\"str\">'12291972'<\/span>,<span class=\"str\">'MMDDYYYY'<\/span>);<\/pre>\n<pre><span class=\"lnum\">  10:  <\/span>  barlog.<span class=\"kwrd\">add<\/span>( <span class=\"str\">'number'<\/span>, lnumber);<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">  11:  <\/span>  barlog.<span class=\"kwrd\">add<\/span>( <span class=\"str\">'string'<\/span>, lstring);<\/pre>\n<pre><span class=\"lnum\">  12:  <\/span>  barlog.<span class=\"kwrd\">add<\/span>( <span class=\"str\">'date'<\/span>, ldate);<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">  13:  <\/span>  barlog.show;<\/pre>\n<pre><span class=\"lnum\">  14:  <\/span>  barlog.TurnLogOff;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">  15:  <\/span><span class=\"kwrd\">end<\/span>;<\/pre>\n<pre><span class=\"lnum\">  16:  <\/span>\/<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<div class=\"csharpcode\">\n<pre>Note the lines 10, 11 and 12 are pretty much the same, except for the types of parameter used. The output of this procedure is like this:<\/pre>\n<\/div>\n<div class=\"csharpcode\">\n<pre class=\"alt\">Log_id             : 135<\/pre>\n<pre>Log_user           : PATRICK<\/pre>\n<pre class=\"alt\">Log_date           : 12-FEB-09<\/pre>\n<pre>Log_message        : number<\/pre>\n<pre class=\"alt\">Log_value_date     : <\/pre>\n<pre>Log_value_number   : 42<\/pre>\n<pre class=\"alt\">Log_value_varchar2 : <\/pre>\n<pre>Log_id             : 136<\/pre>\n<pre class=\"alt\">Log_user           : PATRICK<\/pre>\n<pre>Log_date           : 12-FEB-09<\/pre>\n<pre class=\"alt\">Log_message        : string<\/pre>\n<pre>Log_value_date     : <\/pre>\n<pre class=\"alt\">Log_value_number   : <\/pre>\n<pre>Log_value_varchar2 : Patrick<\/pre>\n<pre class=\"alt\">Log_id             : 137<\/pre>\n<pre>Log_user           : PATRICK<\/pre>\n<pre class=\"alt\">Log_date           : 12-FEB-09<\/pre>\n<pre>Log_message        : <span class=\"kwrd\">date<\/span><\/pre>\n<pre class=\"alt\">Log_value_date     : 29-<span class=\"kwrd\">DEC<\/span>-72<\/pre>\n<pre>Log_value_number   : <\/pre>\n<pre class=\"alt\">Log_value_varchar2 : <\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<div class=\"csharpcode\">&#160;<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<\/p>\n<p>Notice how Oracle chose the right procedure based on the parameter type, not the position of this parameter. Of course some coding has to be done in the log package to write the data out to the right columns in the table, but this logic is hidden in the package body. If I want Oracle choose exactly a single program in a package, I can help its choice by putting in the right names for the different parameters. I could for instance have the log_value_varchar2 field with a number, but the I would have to explicitly tell the engine to choose that program.<\/p>\n<p>This code<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"lnum\">   1:  <\/span><span class=\"kwrd\">declare<\/span><\/pre>\n<pre><span class=\"lnum\">   2:  <\/span>  lnumber pls_integer;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   3:  <\/span><span class=\"kwrd\">begin<\/span><\/pre>\n<pre><span class=\"lnum\">   4:  <\/span>  barlog.TurnLogOn;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   5:  <\/span>  lnumber := 42;<\/pre>\n<pre><span class=\"lnum\">   6:  <\/span>  barlog.<span class=\"kwrd\">add<\/span>( <span class=\"str\">'number in number'<\/span>, lnumber);<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   7:  <\/span>  barlog.show;<\/pre>\n<pre><span class=\"lnum\">   8:  <\/span>  barlog.TurnLogOff;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   9:  <\/span><span class=\"kwrd\">end<\/span>;<\/pre>\n<pre><span class=\"lnum\">  10:  <\/span>\/<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<p>would result in this:<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\">Log_id             : 138<\/pre>\n<pre>Log_user           : PATRICK<\/pre>\n<pre class=\"alt\">Log_date           : 17-FEB-09<\/pre>\n<pre>Log_message        : number <span class=\"kwrd\">in<\/span> number<\/pre>\n<pre class=\"alt\">Log_value_date     : <\/pre>\n<pre>Log_value_number   : 42<\/pre>\n<pre class=\"alt\">Log_value_varchar2 : <\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<p>Whereas this code<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\"><span class=\"lnum\">   1:  <\/span><span class=\"kwrd\">declare<\/span><\/pre>\n<pre><span class=\"lnum\">   2:  <\/span>  lnumber pls_integer;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   3:  <\/span><span class=\"kwrd\">begin<\/span><\/pre>\n<pre><span class=\"lnum\">   4:  <\/span>  barlog.TurnLogOn;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   5:  <\/span>  lnumber := 42;<\/pre>\n<pre><span class=\"lnum\">   6:  <\/span>  barlog.<span class=\"kwrd\">add<\/span>( message_in =&gt; <span class=\"str\">'number in varchar2'<\/span>, value_varchar2_in =&gt; lnumber);<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   7:  <\/span>  barlog.show;<\/pre>\n<pre><span class=\"lnum\">   8:  <\/span>  barlog.TurnLogOff;<\/pre>\n<pre class=\"alt\"><span class=\"lnum\">   9:  <\/span><span class=\"kwrd\">end<\/span>;<\/pre>\n<pre><span class=\"lnum\">  10:  <\/span>\/<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<p>would result in this:<\/p>\n<div class=\"csharpcode\">\n<pre class=\"alt\">Log_id             : 139<\/pre>\n<pre>Log_user           : PATRICK<\/pre>\n<pre class=\"alt\">Log_date           : 17-FEB-09<\/pre>\n<pre>Log_message        : number <span class=\"kwrd\">in<\/span> varchar2<\/pre>\n<pre class=\"alt\">Log_value_date     : <\/pre>\n<pre>Log_value_number   : <\/pre>\n<pre class=\"alt\">Log_value_varchar2 : 42<\/pre>\n<\/div>\n<style type=\"text\/css\">\n<p>.csharpcode, .csharpcode pre\n{\n\tfont-size: small;\n\tcolor: black;\n\tfont-family: consolas, \"Courier New\", courier, monospace;\n\tbackground-color: #ffffff;\n\t\/*white-space: pre;*\/\n}\n.csharpcode pre { margin: 0em; }\n.csharpcode .rem { color: #008000; }\n.csharpcode .kwrd { color: #0000ff; }\n.csharpcode .str { color: #006080; }\n.csharpcode .op { color: #0000c0; }\n.csharpcode .preproc { color: #cc6633; }\n.csharpcode .asp { background-color: #ffff00; }\n.csharpcode .html { color: #800000; }\n.csharpcode .attr { color: #ff0000; }\n.csharpcode .alt \n{\n\tbackground-color: #f4f4f4;\n\twidth: 100%;\n\tmargin: 0em;\n}\n.csharpcode .lnum { color: #606060; }<\/style>\n<\/p>\n<\/p>\n<\/p>\n<p>Notice that Oracle must be able to perform an implicit conversion here. If I were to try to send a character value into a numeric parameter and the conversion is not possible, then I would be presented with an exception.<\/p>\n<p>In some cases, it is better to use named parameters, improve readability of your code. In some cases it is better to use positional parameters. Have Oracle do the heavy lifting, make the right choice for you.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When you call a procedure or function in PL\/SQL you basically have two options for the parameters. By name or by position. If you use the by name version, then every parameter is named. You don\u2019t have to conform to the order of the parameters because Oracle will automatically put the value in the right [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,5],"tags":[],"class_list":["post-305","post","type-post","status-publish","format-standard","hentry","category-oracle","category-plsql"],"_links":{"self":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts\/305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=305"}],"version-history":[{"count":0,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=\/wp\/v2\/posts\/305\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.bar-solutions.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}