例如使用 Angular Material 和使用 [(ngModel)]="isActive" name="isActive"
这将提交带有“isActive”= true的表单
在数据库中保存它的正确方法是什么?我知道在 Oracle 中并没有真正的布尔数据类型......
它应该保存为 Char 数据类型吗?但如果是这样,那么它期望的 'T' 或 'F' 不是真的或假的。
它应该保存为 varchar 吗?那么它可以除真假吗?
感谢您提供有关此的任何信息或适当的数据结构。
您存储布尔值的方式在很大程度上取决于存储该值的字段的语义。有时将布尔值存储为包含“T”/“F”、“Y”/“N”、“IN”/“OUT”、“BLACK”/“WHITE”、“PINK”/“BLUE”的字符字段是合理的,或任何适合您的数据。有时您可能希望将该布尔值作为 NUMBER 存储在 Oracle 中,允许值为 1 和 0、或 100 / 0、或 1 / -1,或任何适合您需要的值。我们经常使用布尔值来表示任意数量的不同事物——这就是 Oracle 不提供布尔类型的原因。您应该使用适合您的应用程序的数据类型和值。
至于 CHAR 与 VARCHAR2 参数,我建议使用 VARCHAR2,因为 CHAR 并不总是像您(或至少“我”:-) 期望的那样。作为解释,请考虑以下块:
DECLARE
PROCEDURE test_string(pinString IN VARCHAR2) IS
strTest VARCHAR2(3) := pinString;
cTest CHAR(3) := pinString;
BEGIN
DBMS_OUTPUT.PUT_LINE('strTest=' || CASE
WHEN strTest IS NULL THEN 'NULL'
ELSE '''' || strTest || ''''
END ||
' cTest=' || CASE
WHEN cTest IS NULL THEN 'NULL'
ELSE '''' || cTest || ''''
END);
END test_string;
BEGIN
test_string('A');
test_string('AB');
test_string('ABC');
test_string('');
test_string(NULL);
END;
运行此输出时:
strTest='A' cTest='A '
strTest='AB' cTest='AB '
strTest='ABC' cTest='ABC'
strTest=NULL cTest=' '
strTest=NULL cTest=NULL
前三行和最后一行并不意外,但第四行让我有点意外。我一直都明白空字符串等价于 NULL。但是,第四行和第五行的输出似乎与该假设相反。在第四行中,我们为 VARCHAR2 输入参数分配了一个长度为零的字符串,该参数随后分配给了 strTest 和 cTest。在 strTest 的情况下,当我们在 VARCHAR2 测试代码中测试它时,它被检测为 NULL。但是,当将此零长度字符串分配给 cTest 时,cTest 会在右侧用空格填充,直到它达到 3 个字符的完整长度。在 CHAR 数据类型的上下文中考虑时,这并不奇怪,但根据我对 VARCHAR2 的使用,它产生了我不期望的结果。它'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句