2014-11-26 4 views
-1

Мне нужно получить сравнение столбцов между таблицей и представлением, я хочу посмотреть, есть ли соответствующие столбцы. (В PLSQL) Столбцы, которые не совпадают, должны выводиться как: column1 в view1 отсутствует в table1 и т.д. Это до сих пор я сделал, но это дает мне ошибку:plsql сравнение таблицы и представления

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 Statement игнорируется ORA-06550: строка 22, столбец 27: PLS-00320: объявление типа этого выражения является неполным или искаженным ORA-06550: строка 22, столбец 5: PL/SQL: заявление игнорируется 06550. 00000 - "строка% s, столбец% s: \ n% s" * Причина: Обычно ошибка компиляции PL/SQL. * Действие:

+0

Пожалуйста, измените вопрос и включают ошибку вы получаете. Благодарю. –

+0

У вас есть два столбца TABLE_NAME и два столбца COLUMN_NAME в одном SELECT. Используйте псевдонимы столбцов. – Multisync

ответ

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; 
Смежные вопросы