加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

关于oracle的boolean问题

发布时间:2020-12-12 14:47:24 所属栏目:百科 来源:网络整理
导读:转载地址为:http://blog.sina.com.cn/s/blog_451f596201014wkw.html 一、oracle本身没有boolean类型,就是说跟数据库相关的类型中不包括boolean,一般采用number(1)和char(1)来实现。 所 以”You cannot insert the values TRUE and FALSE into a datab

转载地址为: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()可以返回正确的结果。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读