Sql 如何存储SELECT语句中的数据并使用该数据与UPDATE语句循环
我正在使用PLSQL,我想将查询结果表单SELECT语句存储在一个数组中,然后我想使用该数组中的元素循环更新所有行。下面代码的问题是它返回一行。子查询返回多行,因为他试图在一行中设置多个变量。在这种情况下你能帮我吗 这是我的代码:Sql 如何存储SELECT语句中的数据并使用该数据与UPDATE语句循环,sql,oracle,plsql,Sql,Oracle,Plsql,我正在使用PLSQL,我想将查询结果表单SELECT语句存储在一个数组中,然后我想使用该数组中的元素循环更新所有行。下面代码的问题是它返回一行。子查询返回多行,因为他试图在一行中设置多个变量。在这种情况下你能帮我吗 这是我的代码: CREATE OR REPLACE PROCEDURE looping IS BEGIN FOR rec IN (SELECT IID FROM DATMCCN0) LOOP UPDATE DATMCCN0 SET E_
CREATE OR REPLACE PROCEDURE looping IS
BEGIN
FOR rec IN (SELECT IID FROM DATMCCN0)
LOOP
UPDATE DATMCCN0
SET E_NOME = (SELECT I_NOME FROM DAT_CCNCONFIG0 INNER JOIN DATMCCN0 ON DAT_CCNCONFIG0.I_NOME = DATMCCN0.CAPLIC where DATMCCN0.IID = rec.IID)
where IID = rec.IID;
END LOOP;
END;
EXECUTE looping;
您不需要循环,可以在一个MERGE语句中完成所有操作,前提是相关查询为每个IID返回一行: 如果没有,则只需要获得一行,如下所示:
CREATE OR REPLACE PROCEDURE looping
IS
BEGIN
MERGE INTO DATMCCN0 dst
USING (
SELECT b.IID,
MAX( I_NOME ) AS I_NOME
FROM DAT_CCNCONFIG0 a
INNER JOIN DATMCCN0 b
ON a.I_NOME = b.CAPLIC
GROUP BY b.IID
) src
ON ( src.IID = dst.IID)
WHEN MATCHED THEN
UPDATE SET E_NOME = src.I_NOME;
END;
UPDATE
(SELECT src.E_NOME, dst.I_NOME
FROM DAT_CCNCONFIG0
JOIN DATMCCN0 src ON DAT_CCNCONFIG0.I_NOME = scr.CAPLIC
JOIN DATMCCN0 dst ON src.IID = dst.IID)
SET E_NOME = I_NOME;
对于如何存储SELECT语句中的数据并将该数据[to loop]与UPDATE语句一起使用的问题,一个字面上的答案如下:
CREATE OR REPLACE PROCEDURE looping
IS
BEGIN
MERGE INTO DATMCCN0 dst
USING (
SELECT b.IID,
MAX( I_NOME ) AS I_NOME
FROM DAT_CCNCONFIG0 a
INNER JOIN DATMCCN0 b
ON a.I_NOME = b.CAPLIC
GROUP BY b.IID
) src
ON ( src.IID = dst.IID)
WHEN MATCHED THEN
UPDATE SET E_NOME = src.I_NOME;
END;
UPDATE
(SELECT src.E_NOME, dst.I_NOME
FROM DAT_CCNCONFIG0
JOIN DATMCCN0 src ON DAT_CCNCONFIG0.I_NOME = scr.CAPLIC
JOIN DATMCCN0 dst ON src.IID = dst.IID)
SET E_NOME = I_NOME;
但是,单行子查询返回多个查询并不能解决您的问题。看看MT0的答案。我给你的这个解决方案发生了什么:?从错误中,看起来你在内部选择中得到了多个iid和caplic组合的值。您需要决定在相应的更新中使用哪个值,max,min。或应添加其他条件以筛选唯一行