创建用于存储临时结果的表
create table T_CHECK_TAB_COLUMNS
(
  OWNER       VARCHAR2(30),
  TABLE_NAME  VARCHAR2(30),
  COLUMN_NAME VARCHAR2(30)
);查询不同用户下相同表名的不同字段:
法一:
创建过程
create or replace procedure check_tab_columns_test
is
begin
    insert into t_check_tab_columns
    select owner,TABLE_NAME,COLUMN_NAME from all_tab_columns where owner='HR' and TABLE_NAME='JOBS' and COLUMN_NAME not in
    (select COLUMN_NAME from all_tab_columns where owner='SCOTT' AND TABLE_NAME='JOBS');
commit;
end check_tab_columns_test;执行过程:exec check_tab_columns_test;查询T_CHECK_TAB_COLUMNS
select * from T_CHECK_TAB_COLUMNS;
查询结果:
OWNER TABLE_NAME COLUMN_NAME
HR JOBS JOB_ID
HR JOBS JOB_TITLE
HR JOBS MIN_SALARY
HR JOBS MAX_SALARY
清空T_CHECK_TAB_COLUMNS表法二:
直接运行
insert into t_check_tab_columns
    select owner,TABLE_NAME,COLUMN_NAME from all_tab_columns where owner='HR' and TABLE_NAME='JOBS' and COLUMN_NAME not in
    (select COLUMN_NAME from all_tab_columns where owner='SCOTT' AND TABLE_NAME='JOBS');
查询T_CHECK_TAB_COLUMNS
select * from T_CHECK_TAB_COLUMNS;
查询结果:
OWNER TABLE_NAME COLUMN_NAME
0行说明:HR用户的JOBS表与SCOTT的JOBS完全相同,所以直接运行后得到的结果是正确的。为什么两种方法的执行结果不一样呢?