在oracle 数据库 中,如何在同张表内从查询到一行后将它修改到另一行?

在oracle 数据库 中,如何在同张表内从查询到一行后将它修改到另一行?新的一行主键已经创建。其他内容一致。
比如,查询到行 A: PID(主键)---名称---代号---步骤---效果图路径
0001 ----苹果4---IP4---下单中---D:\苹果图
现在已经有一行,主键已经创建好。
B: 0032(已经创建) ----空---空---空---空
修改后结果
B: 0032 ----苹果4---IP4---下单中---D:\苹果图

请问怎么用SQL语句完成以上的效果?
A和B表示行A和行B,是在同一张表上操作,最后结果是,在同一张表上,出现主键不相同的的,但是其他信息相同的两个行。

UPDATE TABLE_NAME
SET 名称 = (SELECT Y.名称 FROM TABLE_NAME Y WHERE PID = 0001),
代号 = (SELECT Y.代号 FROM TABLE_NAME Y WHERE PID = 0001),
步骤 = (SELECT Y.步骤 FROM TABLE_NAME Y WHERE PID = 0001),
效果图路径 = (SELECT Y.效果图路径 FROM TABLE_NAME Y WHERE PID = 0001)
WHERE PID = 0032;
COMMIT;

我特意创建了一个表,字段跟你描述的一样.经过测试才回答你的.
针对单行记录的更新操作,这个是最简单的.
其次因为需要处理的记录条数少.不会影响性能.再次,表的字段少,查询速度快.
只是我是以ORACLE数据库来作为实例的,换成其他数据库,换下语法就OK了.
create table test_table
(
PID VARCHAR2(20),
名称 VARCHAR2(20),
代号 VARCHAR2(20),
步骤 VARCHAR2(20),
效果图路径 VARCHAR2(20)
);
INSERT INTO test_table(PID,名称,代号,步骤,效果图路径) VALUES ( '0001' ,'苹果4','IP4','下单中','D:\苹果图');
INSERT INTO test_table(PID,名称,代号,步骤,效果图路径) VALUES ( '0032' ,' ',' ',' ',' ');
COMMIT;
你可以试试,看我的正确不正确.
如果是SQLSERVER数据库,这样是手动执行的方式,
需要换成自动执行,就把这个SQL嵌套进存储过程中就OK了.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-04-10
恩 你我同意楼上 你看看 b表主键和a表主键有没有什么 数值上有没有规律 然后 在存储过程 中 用循环 按规律 对b表进行添加数据追问

是在同一张表上操作。 A,和B是表示
行A,和行B

第2个回答  2012-04-10
这个估计得用存过程,或者事物来实现!
如果是操作多条数据,在存储过程中建立一个索引 做个循环。追问

只针对单行数据的复制和修改。
可以以上面的情况写个范本存储过程么?
谢谢

追答

现在搞驱动了 当前电脑没SQL环境 大概写写吧
IF OBJECT_ID ('InserToTable_B','P') IS NOT NULL
DROP PROCEDURE InserToTable_B ;
GO
CREATE PROCEDURE InserToTable_B
AS
BEGIN
DECLARE @Name char(50); --名称
DECLARE @Nummber char(50); --代号
DECLARE @Step char(50); --步骤
SELECT @Name = a.Name, @Nummber = a.Nummber,@Step = a.Step
FROM Table_A a
WHERE ........ (这里加上指定的条件,可以在当前存储过程加个条件参数 ID什么的)
UPDATE TABLE_B b
SET( b.Name = @Name, b.Nummber = @Nummber,b.Step = @Step)
where ........ (指定条件)
END
GO
创建成功后 执行该存储过程 自己调试一下,我是随便写的,没编译
同一张表也是一样的,条件ID写对就行啦

本回答被提问者采纳
相似回答