2015-09-18 3 views
-2

Мне нужно создать анонимный блок PL/SQL, который должен скопировать данные с t_src в t_dest и значения, которые дублируются для хранения в таблице t_err.PL/SQL: Неправильный синтаксис

t_src имеет два столбца, заполненных данными и не имеющих первичного ключа.
t_dest пусто и столбец 1 является первичным ключом. Когда есть исключение для дубликата, я должен передать его и сохранить дубликаты записей в t_err. Я должен использовать курсоры, forall и BULK COLLECT. К настоящему времени я создал следующий блок:

DECLARE 
    CURSOR c_copy IS 
    select column1, column2 
    from t_src; 
    TYPE curtype IS TABLE of c_copy%ROWTYPE; 
    cursor1 curtype; 
BEGIN 
    OPEN c_copy; 
    LOOP 
    FETCH c_copy BULK COLLECT INTO cursor1; 
    FORALL c_count IN 1..cursor1.COUNT SAVE EXCEPTIONS 
    INSERT INTO t_dest   
       VALUES curtype(c_count)    
    EXCEPTION 
    WHEN DUP_VAL_ON_INDEX THEN 
    INSERT INTO t_err VALUES curtype(c_count);  
    EXIT WHEN c_copy%NOTFOUND 
    END LOOP; 
CLOSE c_copy; 
END 
+1

И проблема в том, что проблема? –

+0

Я не могу закончить скрипт, это дает мне ошибку в строке FORALL – user3493945

ответ

0

ТИП curtype IS ТАБЛИЦА c_copy% ROWTYPE;
Вышеупомянутая строка вызывает проблему.

Вам необходимо создать переменную типа таблицы для каждого из полей, то есть column1, column2.

TYPE tab_column1 - таблица t_src.COLUMN1% TYPE; TYPE tab_column2 - таблица типа t_src.column2%;

L_column1 tab_column1; L_column2 tab_column2;

Затем с помощью

FETCh c_copy BULK COLLECT INTO L_column1, L_column2;

Я столкнулся с подобной проблемой раньше, и это было обходным решением, которое я использовал для фиксации.

Смежные вопросы