首页 文章

plsql比较表和视图

提问于
浏览
-1

我需要比较表和视图之间的列,我选择查看是否有匹配的列 . (在PLSQL中)不匹配的列需要输出为:view1中的column1在table1等中缺失 . 这是到目前为止我已经完成了,但它给了我一个错误:

DECLARE
CURSOR c_col
IS
SELECT T.TABLE_NAME,
T.COLUMN_NAME,
V.TABLE_NAME,
V.COLUMN_NAME
FROM ALL_TAB_COLUMNS T
FULL JOIN ALL_TAB_COLUMNS V
ON T.column_name=V.column_NAME
AND v.table_name='EMP_V'
AND v.owner     ='HR'
WHERE T. OWNER  ='HR'
and T.TABLE_NAME='EMPLOYEES';
v_table c_col%rowtype;
begin
OPEN C_col;
LOOP
FETCH C_col into V_TABLe;
EXIT when C_col%NOTFOUND;
DBMS_OUTPUT.PUT_LINE (v_table.table_name||' '||V_table.column_name);
end LOOP;
close c_col;
end;

这是我不断得到的错误:错误报告 - ORA-06550:第16行,第13列:PLS-00402:游标的SELECT列表中所需的别名,以避免重复的列名称ORA-06550:第16行,第13列:PL / SQL :项目忽略ORA-06550:第20行,第22列:PLS-00320:此表达式类型的声明不完整或格式错误ORA-06550:第20行,第5列:PL / SQL:忽略SQL语句ORA-06550:第22行,第27列:PLS-00320:此表达式类型的声明不完整或格式错误ORA-06550:第22行第5列:PL / SQL:语句忽略06550. 00000 - “行%s,列%s :\ n%s“*原因:通常是PL / SQL编译错误 . *行动:

1 回答

  • 1

    试试这个,出于错误原因,请参阅@Multisync注释

    declare
       cursor c_col is
          select T.TABLE_NAME, T.COLUMN_NAME, V.TABLE_NAME VIEW_NAME,
                 V.COLUMN_NAME VIEW_COLUMN_NAME
            from (select *
                     from ALL_TAB_COLUMNS T
                    where OWNER = 'HR'
                      and TABLE_NAME = 'EMPLOYEES') T
            full outer join (select *
                               from ALL_TAB_COLUMNS
                              where owner = 'HR'
                                and table_name = 'EMP_V') V on T.column_name =
                                                         V.column_NAME
           order by t.column_name, v.column_name;
       v_table c_col%rowtype;
    begin
       open C_col;
       loop
          fetch C_col
             into V_TABLe;
          exit when C_col%notfound;
          DBMS_OUTPUT.PUT_LINE(rpad(v_table.table_name || ' ' ||
                                    V_table.column_name, 30, ' ') || '|    ' ||
                               v_table.VIEW_NAME || ' ' ||
                               V_table.VIEW_COLUMN_NAME);
       end loop;
       close c_col;
    end;
    

相关问题