<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blog @ SIB Visions &#187; Oracle</title>
	<atom:link href="http://blog.sibvisions.com/tag/oracle/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.sibvisions.com</link>
	<description>Blog @ SIB Visions</description>
	<lastBuildDate>Mon, 13 Apr 2026 09:47:01 +0000</lastBuildDate>
		<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Using Boolean Datatype with Oracle and JDBC</title>
		<link>https://blog.sibvisions.com/2015/12/18/using-boolean-datatype-with-oracle-and-jdbc/</link>
		<comments>https://blog.sibvisions.com/2015/12/18/using-boolean-datatype-with-oracle-and-jdbc/#comments</comments>
		<pubDate>Fri, 18 Dec 2015 11:16:20 +0000</pubDate>
		<dc:creator>rjahn</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[JVx]]></category>
		<category><![CDATA[Oracle]]></category>

		<guid isPermaLink="false">http://blog.sibvisions.com/?p=5315</guid>
		<description><![CDATA[Oracle doesn't use/define the SQL Type Boolean. You can't define a column in a table as Boolean. It's possible to use boolean in PL/Sql e.g. for procedures or functions but you can't call the function from SQL.
Example functions

CREATE OR REPLACE FUNCTION afunc&#40;pIn BOOLEAN&#41; RETURN BOOLEAN IS
BEGIN
&#160; RETURN pIn;
END afunc;
/
CREATE OR REPLACE FUNCTION bfunc&#40;pIn VARCHAR2&#41; RETURN [...]]]></description>
			<content:encoded><![CDATA[<p>Oracle doesn't use/define the SQL Type Boolean. You can't define a column in a table as Boolean. It's possible to use boolean in PL/Sql e.g. for procedures or functions but you can't call the function from SQL.</p>
<p>Example functions</p>
<div class="codesnip-container" >
<div class="plsql codesnip" style="font-family:monospace;"><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FUNCTION"><span class="kw1">FUNCTION</span></a> afunc<span class="br0">&#40;</span>pIn <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a><br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> pIn<span class="sy0">;</span><br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> afunc<span class="sy0">;</span><br />
<span class="sy0">/</span></p>
<p><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FUNCTION"><span class="kw1">FUNCTION</span></a> bfunc<span class="br0">&#40;</span>pIn <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=VARCHAR2"><span class="kw1">VARCHAR2</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a><br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> pIn<span class="sy0">;</span><br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> bfunc<span class="sy0">;</span><br />
<span class="sy0">/</span></div>
</div>
<p>It's possible to call:</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">SELECT</span> bfunc<span class="br0">&#40;</span><span class="st0">'Hello'</span><span class="br0">&#41;</span> <span class="kw1">FROM</span> dual;</div>
</div>
<p>but it's not possible to call:</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">SELECT</span> afunc<span class="br0">&#40;</span>true<span class="br0">&#41;</span> <span class="kw1">FROM</span> dual;</div>
</div>
<p>or</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">SELECT</span> afunc<span class="br0">&#40;</span>1<span class="br0">&#41;</span> <span class="kw1">FROM</span> dual;</div>
</div>
<p>(1 = true, 0 = false; boolean is mapped to integer in Oracle)</p>
<p>If you want to call a procedure or function which defines boolean parameters, it's not possible without tricks with Oracle JDBC driver. This is annoying.</p>
<p>We solved the problem in JVx 2.4 and it's now possible to call functions or procedures without tricks. Here's a "more complex" example. We define a function with an input parameter and a procedure with an input/output parameter in a package:</p>
<div class="codesnip-container" >
<div class="plsql codesnip" style="font-family:monospace;"><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PACKAGE"><span class="kw1">PACKAGE</span></a> TestBoolean <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a><br />
&nbsp; <br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FUNCTION"><span class="kw1">FUNCTION</span></a> test<span class="br0">&#40;</span>pOutput <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a><span class="sy0">;</span><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PROCEDURE"><span class="kw1">PROCEDURE</span></a> testBoolOut<span class="br0">&#40;</span>pOutput <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IN"><span class="kw1">IN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OUT"><span class="kw1">OUT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; <br />
<a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a><span class="sy0">;</span><br />
<span class="sy0">/</span></p>
<p><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=CREATE"><span class="kw1">CREATE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OR"><span class="kw1">OR</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=REPLACE"><span class="kw2">REPLACE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PACKAGE"><span class="kw1">PACKAGE</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BODY"><span class="kw1">BODY</span></a> TestBoolean <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a></p>
<p>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FUNCTION"><span class="kw1">FUNCTION</span></a> test<span class="br0">&#40;</span>pOutput <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <span class="br0">&#40;</span>pOutput<span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FALSE"><span class="kw1">FALSE</span></a><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSE"><span class="kw1">ELSE</span></a><br />
&nbsp; &nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=RETURN"><span class="kw1">RETURN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=TRUE"><span class="kw1">TRUE</span></a><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a><span class="sy0">;</span><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a><span class="sy0">;</span></p>
<p>&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=PROCEDURE"><span class="kw1">PROCEDURE</span></a> testBoolOut<span class="br0">&#40;</span>pOutput <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IN"><span class="kw1">IN</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=OUT"><span class="kw1">OUT</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BOOLEAN"><span class="kw1">BOOLEAN</span></a><span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IS"><span class="kw1">IS</span></a><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=BEGIN"><span class="kw1">BEGIN</span></a><br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a> <span class="br0">&#40;</span>pOutput<span class="br0">&#41;</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=THEN"><span class="kw1">THEN</span></a><br />
&nbsp; &nbsp; &nbsp; pOutput <span class="sy0">:=</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=FALSE"><span class="kw1">FALSE</span></a><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=ELSE"><span class="kw1">ELSE</span></a><br />
&nbsp; &nbsp; &nbsp; pOutput <span class="sy0">:=</span> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=TRUE"><span class="kw1">TRUE</span></a><span class="sy0">;</span><br />
&nbsp; &nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a> <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=IF"><span class="kw1">IF</span></a><span class="sy0">;</span><br />
&nbsp; <a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a><span class="sy0">;</span></p>
<p><a href="http://www.oracle.com/pls/db92/db92.drilldown?word=END"><span class="kw1">END</span></a><span class="sy0">;</span><br />
<span class="sy0">/</span></div>
</div>
<p>Now we use JVx' DBAccess to call the function and procedure.</p>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="co1">//DB connection</span><br />
DBAccess dba <span class="sy0">=</span> <span class="kw1">new</span> OracleDBAccess<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dba.<span class="me1">setUrl</span><span class="br0">&#40;</span><span class="st0">&quot;jdbc:oracle:thin:@oravm:1521:XE&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dba.<span class="me1">setUsername</span><span class="br0">&#40;</span><span class="st0">&quot;test&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dba.<span class="me1">setPassword</span><span class="br0">&#40;</span><span class="st0">&quot;test&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dba.<span class="me1">open</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="co1">//Function call</span><br />
<span class="kw1">Assert</span>.<span class="me1">assertEquals</span><span class="br0">&#40;</span><span class="kw3">Boolean</span>.<span class="kw2">TRUE</span>, dba.<span class="me1">executeFunction</span><span class="br0">&#40;</span><span class="st0">&quot;TESTBOOLEAN.TEST&quot;</span>, <span class="kw3">Types</span>.<span class="me1">BOOLEAN</span>, <span class="kw3">Boolean</span>.<span class="kw2">FALSE</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="co1">//Procedure call</span><br />
InOutParam param <span class="sy0">=</span> <span class="kw1">new</span> InOutParam<span class="br0">&#40;</span><span class="kw3">Types</span>.<span class="me1">BOOLEAN</span>, <span class="kw3">Boolean</span>.<span class="kw2">FALSE</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
dba.<span class="me1">executeProcedure</span><span class="br0">&#40;</span><span class="st0">&quot;TESTBOOLEAN.TESTBOOLOUT&quot;</span>, param<span class="br0">&#41;</span><span class="sy0">;</span></p>
<p><span class="kw1">Assert</span>.<span class="me1">assertEquals</span><span class="br0">&#40;</span><span class="kw3">Boolean</span>.<span class="kw2">TRUE</span>, param.<span class="me1">getValue</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
<p>The whole type mapping was done in OracleDBAccess and it's invisible for you. Simply use the API to call procedures or functions.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.sibvisions.com/2015/12/18/using-boolean-datatype-with-oracle-and-jdbc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
