2014-09-20 3 views
2

Я пытался использовать обновления внутри для отборного, но я получил сообщение об ошибке:Использование обновление с курсором

Invalid cursor reference. Relation mytable is not found in cursor TCUR.

Вот процедура:

create or alter procedure MyPROC 
returns (
    BIN_NO integer, 
    QUANTITY integer) 
as 
declare variable V_BIN_TO integer; 
declare variable V_BIN_FROM integer; 
begin 
    for 
    select 
    mytable.bin_no, 
    mytable.quantity 
    from table2 
    right outer join mytable on (table2.quote_id = mytable.quote_id) 
    into :bin_no, :quantity AS CURSOR tcur 

    do begin 
    v_bin_from = COALESCE(:v_bin_to,0) + 1; 
    v_bin_to = COALESCE(:v_bin_to,0) + :quantity; 

    update mytable set bin_no = v_bin_from || v_bin_to where current of tcur; 

    end 
end 

Как мне это исправить? Это база данных Firebird

ответ

1

Есть две отдельные проблемы. Во-первых: обновляемые курсоры требуют предложения FOR UPDATE, иначе он доступен только для чтения. Во-вторых: обновляемым курсорам разрешено ссылаться только на одну таблицу, поэтому ваш запрос не может быть обновляемым.

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