Oracle 数据库中是否有布尔类型,类似于 Ms SQL Server 中的 BIT
数据类型?
int
代替)。我们绝对应该回到代码中。此外,如果表列和 result 列(来自 SELECT
)之间的数据类型是共享的,则该参数完全崩溃,因为有时甚至给定返回布尔值作为计算结果是绝对合适的其余的论点。
DATE
类型 - 想象一下必须一直处理日期的字符串表示:)
Oracle 的 SQL(不是 PL/SQL)中不仅缺少布尔数据类型,而且他们也没有明确的建议来代替使用什么。请参阅 asktom 上的 this thread。当有人指出 'Y'/'N'
取决于英语语言时,他们从推荐 CHAR(1) 'Y'/'N'
切换到 NUMBER(1) 0/1
,而例如德国程序员可能会改用 'J'/'N'
。
最糟糕的是,他们为这个愚蠢的决定辩护,就像他们为 ''=NULL
愚蠢辩护一样。
没有。
可以使用:
IS_COOL NUMBER(1,0)
1 - true
0 - false
--- 享受甲骨文
或使用 char Y/N as described here
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 个字节...
ResultSet.getBoolean()
的 JDBC 规范说:如果指定列的数据类型为 CHAR 或 VARCHAR 并包含“0”,或者数据类型为 BIT、TINYINT、SMALLINT、INTEGER 或 BIGINT 并包含 0 ,则返回 false 值。如果指定列的数据类型为 CHAR 或 VARCHAR 且包含“1”,或者数据类型为 BIT、TINYINT、SMALLINT、INTEGER 或 BIGINT 且包含 1,则返回值 true。 -- 基于此,我会推荐 0/1
解决方案而不是 Y/N
。即使使用 CHAR 列,也最好使用数字。
根据 Ammoq 和 kupa 的回答,我们使用默认值为 0 的 number(1) 并且不允许空值。
这是一个添加列来演示:
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
。最后一个的语义对程序员不友好。我还希望通过具有两个值来使查询优化器更简单。
不,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' ));
不在 SQL 级别,很遗憾虽然 PLSQL 中有一个
不,不存在 boolean 类型,但您可以使用 1/0(类型编号)或 'Y'/'N'(类型 char)或 'true'/'false'(类型 varchar2)取而代之。
一个常见的节省空间的技巧是将布尔值存储为 Oracle CHAR,而不是 NUMBER:
只是因为还没有人提到它:使用 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;
不定期副业成功案例分享
N
和F
被使用,因为ON
和OFF
以相同的字母开头......