2014-03-28 9 views
0

Объявленное определение функции, я хочу использовать значение параметра функции item_account_id в предложении where select.Как ссылаться на параметр функции в запросе?

CREATE OR REPLACE 
FUNCTION UPDATE_CURRENT_BALANCE(item_account_id IN item_account.item_account_id%TYPE)        
RETURN boolean 
AS 
BEGIN   
    if item_data_table_id = 10 then 
     select current_balance_curr_id 
     from BANK_ACCOUNT 
     where item_account_id = item_account_id;   
    end if; 
    RETURN true; 
END UPDATE_CURRENT_BALANCE; 

ответ

0

У вас есть проблема определения, потому что имя параметра совпадает с именем столбца. Как работает разрешение имени Oracle, оба этих item_account_id = item_account_id идентифицируют столбец таблицы.

Решение прост: переименуйте параметр. Использование префикса популярен:

CREATE OR REPLACE FUNCTION UPDATE_CURRENT_BALANCE 
    (p_item_account_id IN item_account.item_account_id%TYPE) 
RETURN boolean 
AS 
BEGIN   
    if item_data_table_id = 10 then 
     select current_balance_curr_id 
     from BANK_ACCOUNT 
     where item_account_id = p_item_account_id;   
    end if; 
    RETURN true; 
END UPDATE_CURRENT_BALANCE; 

Я полагаю item_data_table_id еще один параметр, который заблудился в транскрипции. Вы также должны префикс: согласованность - это хорошая вещь в соглашениях об именах.

+0

Если выполнение функции попадает внутрь логического блока IF-THEN и нет совпадения для входного параметра, функция будет выходить из-за ошибки «NO DATA FOUND». Вы также должны усилить ответ функции на большее количество входных значений и их условий. –

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