Сохранение SQL выберите как переменную и затем внесите разницу с другим выбором - PullRequest
0 голосов
/ 05 октября 2018

Мне нужно сделать следующее.

  1. Выбрать количество для всех таблиц в схеме.Я делаю это с:
select table_name,
  to_number(extractvalue(xmltype(
               dbms_xmlgen.getxml('select count(*) X from SCHEMA.'||table_name))
                  ,'/ROWSET/ROW/X')) as count
from all_tables tables where owner = 'SCHEMA' order by 1,2;

Это дает два столбца: имя таблицы и текущее количество строк.

Сохраните результаты этого выбора в переменной.

Затем вставьте несколько строк в несколько таблиц из внешнего интерфейса.

Сделайте вышеуказанный выбор еще раз.

И различие результатов, показывая только таблицы, которые были затронуты.

Я пробовал со следующим, но выдает ошибку:

"слишком много аргументов"

declare name VARCHAR2(100);
begin
    select (
        select table_name,
        to_number(extractvalue(xmltype(
                dbms_xmlgen.getxml('select count(*) X from SCHEMA.'||table_name))
              ,'/ROWSET/ROW/X')) as count
        from all_tables tables where owner = 'SCHEMA'
    )
    into name
    from dual;
end;

1 Ответ

0 голосов
/ 05 октября 2018

Вы можете использовать CTAS:

CREATE TABLE before_test
AS
select table_name,
to_number(extractvalue(xmltype(
          dbms_xmlgen.getxml('select count(*) X from SCHEMA.'||table_name))
          ,'/ROWSET/ROW/X')) as count
from all_tables tables where owner = 'SCHEMA';

Затем загрузите данные и запустите еще раз, но назовите их after_test.

Когда вы получили обе таблицы, вы можете найтиразница с использованием:

SELECT * FROM before_test MINUS SELECT * FROM after_test;

SELECT * FROM after_test  MINUS SELECT * FROM before_test;
...