Как автоматизировать сохраненный запрос и обновить / сохранить вывод хранимого запроса? - PullRequest
0 голосов
/ 09 мая 2018

Цель этой автоматизации состоит в том, чтобы выполнить несколько запросов select count (*) в каждой строке и обновить / сохранить результат в строках по отношению к запросам. После сохранения результата в каждой строке он должен перейти к следующей строке и до конца таблицы. Это также следует учитывать, если в одной из строк нет запросов на выборку.

Например, всего есть 4 столбца: a) сохраненный запрос (т. е. выберите count (cust) из Customers_savings, где save> = ‘’;) б) сохраненный запрос другой таблицы (т. е. выберите count (cust) из Customers_spendings, где расходы> = ‘’;) в) хранит возвращенный вывод из, г) сохраняет возвращенный вывод из b

Буду очень признателен, если есть шаблон или руководство, с которым я могу внимательно следовать. В настоящее время используется oracle plsql v17.4.

Спасибо

1 Ответ

0 голосов
/ 09 мая 2018

Создать таблицу

Вы могли бы предоставить это;)

CREATE TABLE TABLETEST
(
  QUERY1   VARCHAR2(2000 CHAR),
  RESULT1  NUMBER,
  QUERY2   VARCHAR2(2000 CHAR),
  RESULT2  NUMBER
);

Sample-Data

Вы должны были предоставить это;)

INSERT INTO TABLETEST VALUES('SELECT 1 FROM DUAL', 0, 'SELECT 2 FROM DUAL', 0);
INSERT INTO TABLETEST VALUES('SELECT 3 FROM DUAL', 0, 'SELECT 4 FROM DUAL', 0);

Выполнить запросы

declare
    tmpResult1 NUMBER;
    tmpResult2 NUMBER;
begin
    FOR i IN (SELECT query1, query2 FROM TABLETEST) -- loop through every row
    LOOP
        dbms_output.put_line('query1: "' || i.query1 || '"'); -- let's have a look, what we got back from our select
        dbms_output.put_line('query2: "' || i.query2 || '"');

        EXECUTE IMMEDIATE i.query1 INTO tmpResult1; -- executor out select-statement
        EXECUTE IMMEDIATE i.query2 INTO tmpResult2;

        dbms_output.put_line('tmpResult1: ' || tmpResult1); -- let's have a look at our results
        dbms_output.put_line('tmpResult2: ' || tmpResult2);  

        UPDATE TABLETEST SET RESULT1 = tmpResult1, RESULT2 = tmpResult2 WHERE QUERY1 = i.query1 AND QUERY2 = i.query2; -- Store the results into the table.
    END LOOP;
end;

Результат проверки

SELECT * FROM TABLETEST;
...