【发布时间】:2016-06-10 14:20:57
【问题描述】:
CURSOR text IS
SELECT *
FROM DATA
CURSOR MATCHES IS
SELECT NAME
FROM DATA
INTERSECT
SELECT DESCRIPTION
FROM my_table
BEGIN
FOR i IN text
OPEN MATCHES
FETCH MATCHES INTO MATCH
CLOSE MATCH
IF i IN MATCH
THEN
UPDATE my_table
SET col1 = correlating_new_column1, col2 = correlating_new_column2, col3 = correlating_new_column3
WHERE table_im_trying_to_populate.code = my_seq.curval
ELSE
INSERT INTO TABLE_IM_TRYING_TO_POPULATE(CODE, NAME, DESCRIPTION, col1, col2, col3)
VALUES(my_seq.nextval, other_name, other_description, correlating_new_column1, correlating_new_column2, correlating_new_column3)
END IF;
END LOOP;
基本上,我正在尝试使用我制作的显式游标,它是一个表的选择语句,然后逐行循环并将其放入我的另一个现有表中。如果它在我的另一个现有表中遇到一个名称,它将更新一些列。否则它将整个记录插入到该表中。我正在尝试使用序列来更新“代码”列,以便它更新另一个现有表中的代码 = my_seq.curval。然后对于插图,它只是进入下一个 val。我知道这很复杂,但我真的只是想看看我的设置是否正确。不久前刚开始使用sql developer for oracle。
【问题讨论】:
-
您正在尝试根据来自不同表的行插入/更新同一个表?您忘记在示例代码中包含光标声明;如果您可以更新您的问题以包含它,这将有所帮助。
-
是更新/插入到同一个已经存在的表中。如果名称匹配一行,我会更新一些列。如果没有匹配意味着该名称没有记录,那么我将一条全新的记录插入到具有新代码号的表中。
标签: sql oracle loops if-statement plsql