關於oracle的boolean問題

2021-07-23 14:36:25 字數 1935 閱讀 1255

一、oracle本身沒有boolean型別,就是說跟資料庫相關的型別中不包括boolean,一般採用number(1)和char(1)來實現。

所 以」you  

cannot  

insert 

the  

values  

true and  

false  

into 

a  database  

column.  

also,  

you 

cannot  

select 

or  

fetch  

column  

values into  

a boolean  

variable.「

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 

v1boolean;

begin 

v1:=1>2;

if(v1)then 

dbms_output.put_line('true');

else 

dbms_output.put_line('false');

endif;

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))字段, 如:

create

table

a ( a 

char(1

)  check

(a  in(0

,1)))

然後jdbc用getboolean()可以返回正確的結果。

關於oracle的啟動

有這麼一道題,是關於在例項啟動的時候,哪些檔案在某個階段是不是可以改動的,我覺得這個題是乙個很基礎的題,對於理解oracle有很大的幫助。於是我就查了一下相關資料,分享一下,適合初學者看。1 shutdown nomount 讀取引數檔案,根據引數檔案的記錄,配置sga,啟動後台程序。這個階段因為只...

關於oracle的啟動

有這麼一道題,是關於在例項啟動的時候,哪些檔案在某個階段是不是可以改動的,我覺得這個題是乙個很基礎的題,對於理解oracle有很大的幫助。於是我就查了一下相關資料,分享一下,適合初學者看。1 shutdown nomount 讀取引數檔案,根據引數檔案的記錄,配置sga,啟動後台程序。這個階段因為只...

關於Oracle分頁

connected to oracle9i enterprise edition release 9.2.0.6.0 connected as dev sql sql set timing on sql create table test table as 2 select rownum x 3 f...