我在Oracle中有一个Customer表,其中包含客户的名字和姓氏。
我想创建一个名为'username'的新属性(列),它由名字的前4个字母和姓氏的前4个字母组成。
我试过了:
INSERT INTO CUSTOMER(USERNAME)
SELECT SUBSTR(CUSTOMER_LAST_NAME,0,4)||SUBSTR(CUSTOMER_FIRST_NAME,0,4)
FROM CUSTOMER;
但不幸的是我收到了这个错误:第1行的错误: ORA-01400: 关于如何做的任何想法?
答案 0 :(得分:1)
INSERT
添加行,而不是列。因此,您的insert语句会尝试从表中的现有行生成一组新行。它失败了,因为这些新行只填充username
列,但显然至少有一个其他表列为null;因为您没有填充任何强制列,插入失败并显示ORA-01400: cannot insert NULL into ...
首先,您需要创建(空)列...
ALTER TABLE customer
ADD username VARCHAR2(8); -- make sure YOU chose the correct data type for your needs.
然后您需要使用您想要的值填充该列...
UPDATE customer
SET username = SUBSTR(CUSTOMER_LAST_NAME,0,4)||SUBSTR(CUSTOMER_FIRST_NAME,0,4)
然而,这可能无法给出独特的结果(如果需要,则不要说)。
答案 1 :(得分:0)
获取理由 ORA-01400
您似乎正在尝试为未列出的
INSERT
空值USERNAME
语句的列(CUSTOMER
表的not null
列以外的列), 其中至少有一个是用INSERT
约束定义的。或
CUSTOMER
表下有一个null
触发器,它会尝试为任意定义的not null
列插入VIEW
值 表
我建议你创建一个CUSTOMERS_NICK_NAME
来保存CREATE OR REPLACE VIEW V_CUSTOMER AS
SELECT CUSTOMER_LAST_NAME, CUSTOMER_FIRST_NAME,
SUBSTR(CUSTOMER_LAST_NAME,0,4)||SUBSTR(CUSTOMER_FIRST_NAME,0,4) CUSTOMER_NICK_NAME
FROM CUSTOMER;
,而不是通过创建表来多路复用数据,并在需要客户信息时查询此视图:
NSSplitViewController
答案 2 :(得分:0)
您正在获取ORA-01400,因为您尝试将空值插入非空列。以下语句使customer.username列可为空:
alter table
customer
modify
(username NULL);