gpt4 book ai didi

sql - 为什么我可以将数字插入 VARCHAR2 列?

转载 作者:行者123 更新时间:2023-12-02 09:26:29 25 4
gpt4 key购买 nike

我的表有一个奇怪的问题,我正在向表中插入行,现在我正在尝试测试它,在我的一个测试中,它允许一个不应该的条目。

我的表定义:

CREATE TABLE ITEMS(
ITEM_NUMBER VARCHAR2(3)
CONSTRAINT ITEMS_ITEM_NUMBERf_PK PRIMARY KEY,
ITEM_DESCRIPTION VARCHAR2(30),
ITEM_SIZE VARCHAR2(2),
ITEM_COST NUMBER(30,0),
ITEM_QTY NUMBER(2,0),
ORDER_NUMBER VARCHAR2(4));

当我尝试通过输入数字来测试ITEM_SIZE列时,它只是将其插入。

INSERT INTO ITEMS VALUES ('I32', 'Leather blazer', 'L', 14.00, 1, 'O114');
INSERT INTO ITEMS VALUES ('I33', 'Fleece vest', 'L', 28.00, 1, 'O128');
INSERT INTO ITEMS VALUES ('I34', 'Khaki pants', 'S', 22.00, 3, 'O122');
INSERT INTO ITEMS VALUES ('I35', 'Muscle Tee', 'M', 12.99, 1, 'O122');
INSERT INTO ITEMS VALUES ('I36', 'Trench Coat', 'M', 03.00, 1, 'O133');
INSERT INTO ITEMS VALUES ('I37', 'Crewneck sweater', 'XL', 07.00, 1, 'O107');
INSERT INTO ITEMS VALUES ('I38', 'Varsity Sweater', 'M', 08.99, 1, 'O108');
INSERT INTO ITEMS VALUES ('I39', 'CROOK', 'M', 12.00, 1, 'O112');

//--测试者--//

INSERT INTO ITEMS VALUES ('I49', 'bROOK', 10, 12.00, 1, 'O112');

在上面的语句中,我将数字 10 插入到 ITEM_SIZE VARCHAR2(2) 中。我怎样才能避免这种情况?

最佳答案

正如@kevinsky所说,Oracle is doing implicit data conversion插入时从数字到字符串。

如果您想限制可以放入列中的值,则可以添加 a check constraint :

alter table items add constraint items_size_chk
check (item_size in ('XXS','XS','S','M','L','XL','XXL','XXXL'));

Table ITEMS altered.

INSERT INTO ITEMS VALUES ('I49', 'bROOK', 10, 12.00, 1, 'O112');

SQL Error: ORA-02290: check constraint (SCHEMA.ITEMS_SIZE_CHK) violated
02290. 00000 - "check constraint (%s.%s) violated"
*Cause: The values being inserted do not satisfy the named check

如果您想要不同的限制,您可以更改检查的完成方式;例如,您可以进行正则表达式检查以排除数字但允许任何字符。在这种情况下,您似乎更有可能希望允许特定值的列表。

请注意,当添加新的有效大小时,您将必须修改检查约束;并且任何项目都允许使用这些尺寸值。

如果有效大小来自另一个表,那么您可以使用外键约束。您可能确实想要一个对每个项目有效的尺寸(或其他属性)列表,因此您的数据模型可能需要一些充实。

关于sql - 为什么我可以将数字插入 VARCHAR2 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37574754/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com