我不想使用“循环”相关的关键字,我怎样才能实现循环与基本的SQL命令在甲骨文?
我有两个表:如何在sql中循环?
我想环路B中的所有记录,如果ID = AID,然后设置A.Color = B.Type
提前感谢!
我不想使用“循环”相关的关键字,我怎样才能实现循环与基本的SQL命令在甲骨文?
我有两个表:如何在sql中循环?
我想环路B中的所有记录,如果ID = AID,然后设置A.Color = B.Type
提前感谢!
根据定义,循环是一个程序性构造。
SQL是声明性的:告诉数据库你想做什么,而不是如何去做。
如果您完全相信您需要编写这样的程序,然后将其写入Oracle过程语言PL/SQL中。
Bu我相信有可能在SQL中使用带WHERE子句的UPDATE来做你想做的事情。
像这样(每NullUserException校正):
UPDATE A SET A.Color = (SELECT B.Type FROM B WHERE A.ID = B.AID)
要做到这一点,你将不得不写使用PL/SQL存储过程。 Here是有关该主题的一些信息和论文的oracle页面。
你可能只是做:
UPDATE tablea a
SET a.color = (SELECT b.type
FROM tableb b
WHERE b.aid = a.id)
的另一种方法:
MERGE INTO a
USING b
ON (b.aid = a.id)
WHEN MATCHED THEN UPDATE SET a.color = b.type;
+1好的答案。 – NullUserException
正如其他人指出的那样,你也许可以用一个正常的DML语句解决您的问题,不涉及任何循环。但是,为了给你如何完成你的要求在PL/SQL,这里是一个例子一些基本...
DECLARE
CURSOR c IS
SELECT id, aid, type FROM b;
statement VARCHAR2(200);
BEGIN
FOR iterator IN c LOOP
IF iterator.id = iterator.aid THEN
statement := 'UPDATE a SET color = ' || iterator.type || 'WHERE id = ' || iterator.id;
EXECUTE IMMEDIATE statement;
END IF;
END LOOP;
END;
这个匿名PL/SQL块将通过表B中的每个记录重复,而如果乙.id = b.aid,它将更新表a并设置a.color = b.type,其中a.id = b.id.
这似乎是你所要求的。这并不是一个有效的方法,因为你在表b中每行都有一个DML语句,它有b.id = b.aid。但我想要更多地将其作为语法示例。这只是通过一种方式遍历游标的一种方式;您还可以显式地打开游标并获取记录,但如果您不需要执行任何操作,而是遍历整个结果集,则这样更容易。
将'sql'标记编辑为'plsql',因为这是针对Oracle的。 –