2016-05-25 2 views
0

Кажется, это должно быть легко, но синтаксис ускользает от меня. Я пытаюсь обновить существующую строку - первое, что я обнаружил, это «Новое». Тогда я хочу, чтобы вернуть разделители строки, имеющую ключ и 2 других значения:Процедура Oracle для обновления строки и возврата ее ключа?

create or replace procedure usp_direct_print_task_deque 
(
    taskNa in char 
,environmentCd in char 
) as 
begin 
    declare rowkey number; 

    select '~' || rowversion || '~' || target_document || '~' || target_printer 
    as delimited_data 
    , rowversion 
    from AFD1.bt_direct_print_tasks 
    where environment_cd = environmentCd 
    and task_na = taskNa 
    and task_status = 'new' 
    and rownum = 1; 

    update bt_direct_print_tasks 
    set taskStatus = 'processing' 
    where rowversion = rowkey; 

    return delimited_data; 

end usp_direct_print_task_deque; 
+0

Вы получаете синтаксическую ошибку? Не могли бы вы разместить его, если хотите? – Prashant

+0

где идет rowkey? – cableload

+0

Хорошая находка! Я удалил «объявить номер строки строки»; заявление. Rowkey - это rowversion. Я переименовал его только для того, чтобы дать понять, что это использует синтетический ключ. –

ответ

1

Вам нужно определить параметры OUT переменных, скажу x_delimited_data и x_rowkey для хранения значений для delimited_data и rowkey соответственно. Затем измените свой SELECT на SELECT... INTO x_delimited_data, x_rowkey. (Я предполагаю, что rowkey - это то, что вы выбираете как rowversion). Затем измените return delimited_data; на return;

+0

Спасибо, Мэтью! Ты сделал это. –

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