2013-11-25 3 views
0

Я пытаюсь написать функцию PL/SQL Oracle, которая вернет заданный статус_определения приложения, чтобы я мог архивировать данные в таблицу истории, если возвращаемый статус_type является конкретным стоимость.Oracle - функция для возврата результата запроса на основе параметра

В случае данного примера мои типы статусов «Approved», «В ожидании» или «Отклонено»

я до сих пор написал эту функцию, так что я могу запустить метод в операторе IF, чтобы проверить текущий тип состояния перед архивированием данных.

CREATE OR REPLACE FUNCTION get_status(curr_id NUMBER) 
RETURN VARCHAR2 AS this_type status_type; 

BEGIN 
    SELECT status_type 
    INTO this_type 
    FROM status 
    WHERE status_id LIKE curr_id; 

    RETURN this_type; 
END get_status; 

И хотя он компилируется, я получаю сообщение о том, что мой оператор PL/SQL был проигнорирован.
Я довольно новичок в Oracle, поэтому, вероятно, я пропустил что-то прямое, может ли кто-нибудь дать мне какие-либо указания относительно того, где я ошибаюсь в своем коде?

Заранее спасибо, Alex.

+0

Можете вы рассказать об ошибке, пожалуйста? – Mureinik

+0

Удостоверьтесь: Ошибка (2,31): PLS-00201: идентификатор 'STATUS_TYPE' должен быть объявлен И Ошибка (5,3): PL/SQL: заявление SQL игнорируется - как я понимаю, строка "this_type status_type" устанавливает псевдоним этого_type в status_type (который является столбцом в таблице состояния)? – Alex

ответ

2
CREATE OR REPLACE FUNCTION get_status(curr_id NUMBER) 
RETURN VARCHAR2 
AS 
--%TYPE is used to declare variables with relation to the data type of a column 
--in an existing table 

this_type status.status_type%TYPE; --change is required here 

BEGIN 
    SELECT status_type 
    INTO this_type 
    FROM status 
    WHERE status_id LIKE curr_id; 

    RETURN this_type; 
END get_status; 
/
+0

Ahhh Я вижу, это имеет смысл! Благодарю Гаурава! – Alex

+2

Примечание: 1. Использование условия 'like' без подстановочных знаков эквивалентно использованию знака равенства. Если нет необходимости выполнять сопоставление с образцом, переключитесь на простой знак равенства; 2. При различных обстоятельствах вы можете: a) нажать ошибку 'not_data_found' или b)' too_many_rows'. –

+0

@ Николас Краснов: ты прав, @ Алекс: плз имейте это в виду –

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