一、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...