关于oracle的boolean问题

前端之家收集整理的这篇文章主要介绍了关于oracle的boolean问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

转载地址为:http://blog.sina.com.cn/s/blog_451f596201014wkw.html



一、oracle本身没有boolean类型,就是说跟数据库相关的类型中不包括boolean,一般采用number(1)和char(1)来实现。
所 以”Youcannotinsertthe values TRUE and FALSE into adatabasecolumn.Also,you cannot select or fetchcolumnvalues intoa BOOLEANvariable.“
plsql为了实现结构化编程,支持了boolean类 型,所以可能会出现的问题是一个存储过程或者函数的返回参数是boolean型的,但在call这个procedure的时候,无法注册boolean类 型的返回参数,执行时会抛出”参数类型不对“的exception,解决的方案就是把boolean的参数用别的类型代替。
不太明白oracle为什么不支持 boolean类型。
二、 一直被Oracle中没有boolean类型困扰,网上有两种解决方案,一是用Number(1),二是用Char(1),各有所长,个人比较喜欢用 Number方式解决,原因很简单,因为是从C语言开始的,这符合C语言的习惯。前几天有幸咨询到Oracle方面的顾问,他们提供的解决方案是用 Char(1)实现boolean,但也有需要注意的地方,原话如下:
如果是特定boolean类型情况下,Char(1)是比Number(1)更好的选择,因为前者所用的存储空间会比后者少,但这二者在查询时存储空间的 节省会提供查效率,但是要注意的是用Char(1)的时候不能让这个字段可以为空,必须有缺省,否则查询效率会降低



三、PL/sql 中有boolean类型,有null类型
PL/sql中是有Boolean类型的,只能取2个值:true和false;
存储过程中的变量也支持boolean型;
数据库中没有boolean类型。

四、存储过程中:

declare 
	v1 boolean;
begin 
	v1:=1>2;
	if(v1)then 
     	dbms_output.put_line('true');
	else 
    	dbms_output.put_line('false');
	end if;
end; 
打印:false
----------------------------------------
declare 
	v1 boolean;
begin 
	v1:=1>2;
	dbms_output.put_line(v1);
end;




会报错。运行时得到错误信息:调用'PUT_LINE'时参数个数或类型错误这是因为在脚本中不能直接打印boolean类型的值。


五:
oracle 没有boolean,MysqL用bit(1)而oracle可以用char(1) check(...(0,1))字段,
如:
createtablea(achar(1)check(ain0,)))

然后JDBC用getBoolean()可以返回正确的结果。
原文链接:https://www.f2er.com/oracle/208759.html

猜你在找的Oracle相关文章