BIT
Ms SQL Serverのデータ型と同様に、Oracleデータベースにブール型はありますか?
int
代わりにs を使用しています)。私たちは間違いなくコードのそれらに戻るべきです。さらに、テーブル列と(aからの)結果列の間のデータ型SELECT
が共有される場合、引数は完全にバラバラになります。残りの引数が与えられた場合でも、計算結果としてブール値を返すことが絶対に適切だからです。
DATE
型があることをうれしく思います
BIT
Ms SQL Serverのデータ型と同様に、Oracleデータベースにブール型はありますか?
int
代わりにs を使用しています)。私たちは間違いなくコードのそれらに戻るべきです。さらに、テーブル列と(aからの)結果列の間のデータ型SELECT
が共有される場合、引数は完全にバラバラになります。残りの引数が与えられた場合でも、計算結果としてブール値を返すことが絶対に適切だからです。
DATE
型があることをうれしく思います
回答:
OracleのSQL(PL / SQLではない)にブールデータ型がないだけでなく、代わりに何を使用するかについて明確な推奨もありません。参照してくださいこのスレッド asktom上を。CHAR(1) 'Y'/'N'
彼らが推奨することからNUMBER(1) 0/1
、誰か'Y'/'N'
が英語に依存していると指摘したときに切り替えるが、例えばドイツのプログラマーは'J'/'N'
代わりに使うかもしれない。
最悪のことは、彼らが''=NULL
愚かさを守るのと同じように、彼らがこの愚かな決断を守ることです。
N
とF
するので、使用されているON
とOFF
同じ文字で始まる...
いいえ。
使える:
IS_COOL NUMBER(1,0)
1 - true
0 - false
--- Oracleをお楽しみください
create table testbool (boolc char(1), booln number(1)); insert into testbool values ('Y', 1 ); select dump(boolc), dump(booln) from testbool;
そのCHARが格納されています。Typ=96 Len=1: 89
そのNUMBER:Typ=2 Len=2: 193,2
少なくとも12cでは、NUMBER(1)は2バイトを使用できます...
Ammoqおよびkupaの回答に従い、デフォルトの0でnumber(1)を使用し、nullは許可しません。
以下に、追加列を示します。
ALTER TABLE YourSchema.YourTable ADD (ColumnName NUMBER(1) DEFAULT 0 NOT NULL);
これが誰かを助けることを願っています。
boolean intToBool(int in) { return (in != 0); }
ColumnName = 0
またはColumnName = 1
ではなく、ColumnName = 0
かとColumnName <> 0
。最後のセマンティクスはプログラマーフレンドリーではありません。また、2つの値を設定することで、クエリオプティマイザーにとってよりシンプルにしたいと考えています。
いいえ、Oracleデータベースにはブール型はありませんが、次の方法で実行できます。
列にチェック制約を設定できます。
テーブルにチェック列がない場合は、追加できます。
ALTER TABLE table_name
ADD column_name_check char(1) DEFAULT '1';
レジスタを追加すると、デフォルトでこの列は1になります。
ここでは、列の値を制限するチェックを配置し、1または0のみを配置します
ALTER TABLE table_name ADD
CONSTRAINT name_constraint
column_name_check (ONOFF in ( '1', '0' ));
一般的なスペース節約のトリックは、ブール値をNUMBERではなくOracle CHARとして格納することです。
まだ誰も言及していないからといって、RAW(1)を使用することも一般的な方法のようです。
DECLARE
error_flag BOOLEAN := false;
BEGIN
error_flag := true;
--error_flag := 13;--expression is of wrong type
IF error_flag THEN
UPDATE table_a SET id= 8 WHERE id = 1;
END IF;
END;