我需要比较表和视图之间的列,我选择查看是否有匹配的列。(在PLSQL中) 不匹配的列需要输出为:table1中缺少view1中的column1等。 到目前为止,我已经做了,但它给了我一个错误:
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编译错误。 *操作:
答案 0 :(得分: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;