【发布时间】:2019-03-07 17:18:44
【问题描述】:
我有一个使用 for 循环的解决方案,但这种方法效率低下且性能不佳。我是使用集合的新手,还不能在互联网上找到我的答案。谁能指出我正确的方向? 这是我想要实现的简化版本。
DECLARE
TYPE rec_numbers IS RECORD
(
DIGIT NUMBER,
ENGLISH VARCHAR2 (10),
FRENCH VARCHAR2(10),
ITALIAN VARCHAR2(10)
);
TYPE tab_numbers IS TABLE OF rec_numbers;
blk_num tab_numbers;
blk_num2 tab_numbers;
BEGIN
SELECT 1 DIGIT, 'ONE' ENGLISH, NULL FRENCH, NULL ITALIAN
BULK COLLECT INTO blk_num
FROM DUAL;
SELECT 1 DIGIT, NULL ENGLISH, 'UN' FRENCH, 'UNO' ITALIAN
BULK COLLECT INTO blk_num2
FROM DUAL;
FOR i IN blk_num.FIRST .. blk_num.LAST LOOP
FOR j IN blk_num2.FIRST .. blk_num2.LAST LOOP
IF blk_num(i).digit = blk_num2(j).digit THEN
blk_num(i).french := blk_num2(j).french;
blk_num(i).italian := blk_num2(j).italian;
END IF;
END LOOP;
END LOOP;
END;
【问题讨论】:
-
为什么要在这里使用集合?您的版本似乎表明您首先将表中的数据加载到集合中并进行一些比较。为什么不做所有这些都是纯 SQL?
标签: sql oracle join plsql collections