我正在研究Oracle数据库。它有一个名为USR_INFO的表,并有以下列。
U_ROLE可以是“A”,“B”或“C”的值。
现在我想创建一个名为ROLE_INFO的新表,其中包含以下列
任务是在USR_INFO中查询并查找U_ROLE ==“B”,然后查找是否匹配 然后将U_ID复制到ROLE_ID,将U_NAME复制到ROLE_NAME。我想为所有行做这件事 在USR_INFO中。在这样做时,我还想在ROLE_TAG中插入“BB”。
将所有数据复制到ROLE_INFO后完成。我想搜索U_ROLE ==“B” 在USR_INFO中删除所有这些行而不影响其他行。
这就是我到目前为止所做的。
创建名为ROLE_INFO的新表
CREATE TABLE ROLE_INFO
(
ROLE_ID INT,
ROLE_NAME VARCHAR(255),
ROLE_TAG VARCHAR(10)
);
现在进行复制,我做了这个,
INSERT INTO ROLE_INFO (ROLE_ID, ROLE_NAME)
SELECT U_ID, U_NAME
FROM USR_INFO
WHERE U_ROLE == "B"
// 当我执行插入操作时,如何确保ROLE_TAG填充“BB”?
删除
DELETE FROM USR_INFO
WHERE U_ROLE == "B";
// 这会删除已经复制到ROLE_INFO的行吗?或者它会删除更多?
答案 0 :(得分:1)
您可以通过这种方式修改插入,以在插入语句中添加“BB”(请注意单=
而不是==
)。同样在where子句中将"B"
替换为'B'
。
INSERT INTO ROLE_INFO (ROLE_ID, ROLE_NAME , ROLE_TAG)
SELECT U_ID, U_NAME,'BB'
FROM USR_INFO
WHERE U_ROLE='B';
COMMIT;
DELETE FROM USR_INFO
WHERE U_ROLE='B';
COMMIT;
由于你的select语句和delete语句正在检查相同的条件,delete语句只会删除U_ROLE =“B”的行(请注意你也需要使用单个等号)。
此外,一旦执行了insert语句,就需要发出一个commit语句,以便更改持久且可见。