我从一年的第一天到当前月份都有数据。我必须先获取当前月份的数据,然后通过更改标志直到年底才填充相同的数据
我打算创建一个并集查询,但无法根据当月动态更改它。
我有一个表,该表有8列,而'Flag'是第9列,其中一列是具有月年数据的日期。我要问的是,我必须选择当前月份的数据,并用即将到来的月份名称的月份年份填充相同的数据,直到剩下的7列的年末标记为“未来”。最好的方法是什么?例如,我有从19年1月到19年8月的数据。我必须复制8月19日的数据,并将日期(Month_Year)字段更改为“ 9月19日至12月19日”,并将其与原始表合并,因为它具有截至19年8月19日的全年数据和实际数据,并复制了8月的数据。 19日至12月19日
答案 0 :(得分:0)
请添加表结构/数据集。您还可以将表格的摘要/图片与数据一起附加。
1。请记住,八月当前只有21天数据,因此您可以在剩余天数中重复最后几天的数据。 2.您也可以尝试使用FORALL将数据插入表中,但这可能很棘手,因为月份必须更改4次
基于此示例代码可以是:
DECLARE
l_remaining_mnths NUMBER;
TYPE tab_sho IS TABLE OF sho_table%ROWTYPE
INDEX BY BINARY_INTEGER;
l_tab tab_sho;
l_month VARCHAR2(100);
j NUMBER := 0;
BEGIN
SELECT 12 - EXTRACT(MONTH FROM sysdate)
INTO l_remaining_mnths
FROM dual;
SELECT *
BULK COLLECT INTO l_tab
FROM sho_table
WHERE flag = 'current';
dbms_output.put_line('total records-->'||l_tab.COUNT);
FOR i in 1..l_remaining_mnths
LOOP
SELECT TO_CHAR(ADD_MONTHS(sysdate,i),'Month')||19
INTO l_month
FROM dual;
dbms_output.put_line('l_tab(i).month_year -->'||l_tab(i).month_year);
FOR j IN l_tab.FIRST..l_tab.LAST
LOOP
l_tab(j).month_year := l_month;
INSERT INTO sho_table
(
month_year
,column2
,flag
)
VALUES
(
l_tab(j).month_year
,'newvalue'
,'future'
);
END LOOP;
EXIT WHEN SQL%NOTFOUND;
END LOOP;
/*
dbms_output.put_line('Before for all');
FORALL j IN 1..l_tab.COUNT
INSERT INTO sho_table
VALUES l_tab(j);
dbms_output.put_line('after for all');
*/
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('We are in the exception '||SQLERRM);
END;