将SQL select存储为变量,以后与另一个select进行比较

时间:2018-10-05 13:03:58

标签: sql oracle plsql oracle-sqldeveloper

我需要执行以下操作。

  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;

它提供两列:表名和当前行数。

  1. 将此选择的结果存储在变量中。

  2. 然后从外部接口在几张表中插入一些行。

  3. 再次执行以上选择。

  4. 然后比较结果,仅显示受影响的表。

我尝试了以下操作,但出现错误:

  

“参数过多”

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 :(得分:0)

您可以使用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;