oracle数据布尔,Oracle中的布尔字段

本文探讨了在Oracle数据库中实现布尔字段的不同方法,包括使用0/1、'Y'/ 'N'以及它们的优缺点。建议使用0和1作为数字,配合检查约束,以确保语言独立性和更好的查询效率。同时,提供了在Oracle中添加布尔列的SQL语句示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我发现这个链接有用。

这里是强调每种方法的一些优点/缺点的段落。

最常见的devise是模仿Oracle数据字典视图使用的许多类似布尔的标志,select“Y”为true,“N”为false。 但是,要正确地与主机环境(如JDBC,OCCI和其他编程环境)进行交互,最好select0代表false,1代表true,这样可以正确使用getBoolean和setBoolean函数。

基本上他们主张方法2,为了效率的缘故,使用

值为 0/1(因为与JDBC的getBoolean()等)具有检查约束

一种CHAR(因为它使用的空间less于NUMBER)。

他们的例子:

create table tbool (bool char check (bool in (0,1)); insert into tbool values(0); insert into tbool values(1);`

Oracle本身使用Y / N作为布尔值。 为了完整性,应该注意的是,pl / sql有一个布尔types,只有表没有。

如果您正在使用该字段来指示是否需要处理logging,则可以考虑使用Y和NULL作为值。 这使得占用很小空间的非常小的(快速读取)索引。

要使用最less量的空间,您应该使用一个约束为“Y”或“N”的CHAR字段。 Oracle不支持BOOLEAN,BIT或TINYINT数据types,所以CHAR的一个字节尽可能小。

最好的select是0和1(作为数字 – 另一个答案build议0和1作为空间效率的CHAR ,但这有点扭曲对我来说),使用NOT NULL和检查约束限制内容到这些值。 (如果你需要列可以为空,那么它不是一个你正在处理的布尔值,而是一个具有三个值的枚举…)

0/1的优点:

语言独立。 如果每个人都使用它,那么'Y'和'N'会很好。 但他们没有。 在法国,他们使用“O”和“N”(我亲眼看到了这一点)。 我没有在芬兰编程,看他们是否在那里使用“E”和“K” – 毫无疑问他们比这更聪明,但是你不能确定。

与广泛使用的编程语言(C,C ++,Perl,Javascript)的实践相一致,

和应用层一起玩,比如Hibernate

例如,导致更简洁的SQL,以找出有多less香蕉准备吃香蕉的select sum(is_ripe) from bananas而不是select count(*) from bananas where is_ripe = 'Y'或者甚至是(yuk) select sum(case is_ripe when 'Y' then 1 else 0) from bananas

'Y'/'N'的优点:

占用空间比0/1less

这是甲骨文build议的,也许是一些人更习惯的

另一张海报提出“Y”/ null为performance收益。 如果你已经certificate你需要的性能,那么公平,但否则避免,因为它使查询不那么自然( some_column is null而不是some_column = 0 ),在一个左join你会混淆虚假与不存在的logging。

1/0或Y / N上带有检查约束。 以太方式很好。 我个人更喜欢1/0,因为我在perl中做了很多工作,并且它使得在数据库字段上执行perl布尔操作变得非常简单。

如果你想和ORACLE的头把手一起真正深入地讨论这个问题,那么请查看Tom Kyte对此的评论。

我做了大部分工作的数据库都使用了'Y'/'N'作为布尔值。 有了这个实现,你可以得到一些技巧,如:

计数是真的行:

SELECT SUM(BOOLEAN_FLAG ='Y'then 1 ELSE 0时的情况)从X开始

在对行进行分组时,强制执行“如果一行是真的,那么都是真的”逻辑:

从MAX中selectMAX(BOOLEAN_FLAG)

相反,如果一行为假,则使用MIN强制分组。

通过向Oracle数据库中的现有表添加“布尔”列(使用numbertypes)来实现接受的答案的工作示例:

ALTER TABLE my_table_name ADD ( my_new_boolean_column number(1) DEFAULT 0 NOT NULL CONSTRAINT my_new_boolean_column CHECK (my_new_boolean_column in (1,0)) );

这会在my_table_name创build一个名为my_new_boolean_column的新列,默认值为0.该列不接受NULL值,并将接受的值限制为0或1 。

在我们的数据库中,我们使用一个枚举来确保我们传递TRUE或FALSE。 如果你这样做,前两种方法中的任何一种,如果不经过适当的devise就开始给整数增加新的含义,或者结束于具有Y,y,N,n,T,t, F和f值,并且必须记住哪个代码段使用哪个表以及它正在使用的是哪个版本。

在Vue.js应用中,处理Oracle数据库返回的数据并将其字段转换为布尔类型通常涉及到数据获取、解析以及在模板中进行条件渲染。假设你已经通过axios或其他前端库从Oracle数据库获取了数据,并存储在一个变量如`data`里,这个过程可以分为几步: 1. 数据获取: ```javascript async function fetchData() { try { const response = await axios.get('your-oracle-api-url'); let resultData = response.data; // 假设这里是你从Oracle得到的数据 } catch (error) { console.error(error); } } ``` 2. 数据解析: 你需要遍历结果数据,检查特定字段值是否符合转换为布尔的标准。例如,你可以查找包含关键字"true"、"yes"或"1"等的字符串,然后转换为`true`,其他则转换为`false`。 ```javascript function isTruthy(value) { return ['true', 'yes', '1'].includes(String(value).toLowerCase()); } resultData.forEach(item => { item.yourBooleanField = isTruthy(item.yourOracleField); // 假设yourOracleField是需要转换的字段名 }); ``` 3. 使用布尔数据在模板中显示: 在Vue的模板中,你可以直接使用`v-if`或`v-show`指令来基于转换后的布尔值显示或隐藏内容。 ```html <template> <div v-for="item in resultData"> <p :class="{ active: item.yourBooleanField }">...</p> <!-- 如果yourBooleanField为真,active样式将会应用 --> </div> </template> <script> export default { data() { return { resultData: [] }; }, async created() { await fetchData(); }, methods: { fetchData, isTruthy } }; </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值