Использование функции для форматирования значения одного столбца и вызов этой функции в операторе SQL - PullRequest
0 голосов
/ 09 мая 2018

Я хочу написать функцию, которую можно использовать для форматирования зарплаты преподавателя (FACULTY - таблица, в которой каждая строка является членом) до $ 9 999 999,99 без жесткого кодирования точного типа данных зарплаты (т. Е. Функция должна работать дажеесли в будущем будут внесены незначительные изменения в размер / тип данных о заработной плате).Я хочу использовать эту функцию в SQL-выражении для отображения зарплаты преподавателя.

Вот как выглядит мой код функции прямо сейчас.

CREATE OR REPLACE FUNCTION FUNC_FORMAT_SAL(fid IN FACULTY.F_ID%TYPE)
RETURN NUMBER IS

sal NUMBER;
BEGIN
SELECT FACULTY.F_SALARY INTO sal FROM FACULTY
WHERE FACULTY.F_ID = fid;


RETURN  sal;

END;

Я понимаю, что в PLSQL функция не может вернуть пустое место, верно?Вот почему я взял F_ID члена в качестве входа IN в функцию.Внутри этой функции я хочу отформатировать SALARY для этого члена, чтобы он мог отображаться при вызове оператора SQL, а затем возвращать отформатированный оклад.

Имею ли я какой-то смысл?Это учебный вопрос в классе, и я, кажется, могу понять, даже если это кажется простым.

1 Ответ

0 голосов
/ 09 мая 2018

Я бы сказал, что ваша функция должна возвращать VARCHAR2, если вы собираетесь использовать ее для отображения. Сделав еще один шаг, было бы лучше также параметризовать модель формата. Он должен включать обработку исключений таким образом, чтобы при отсутствии данных для идентификатора он возвращал NULL и поднимал exception для других ошибок (таких как модель недопустимого формата).

CREATE OR REPLACE FUNCTION func_format_sal(p_fid IN faculty.f_id%TYPE, 
p_format IN VARCHAR2 DEFAULT '$9,999,999.99') 
RETURN VARCHAR2 
IS 
  v_sal VARCHAR2(40); 
BEGIN 
    SELECT TO_CHAR(f.f_salary, p_format) 
    INTO   v_sal 
    FROM   faculty f 
    WHERE  f.f_id = p_fid; 

    RETURN v_sal; 
EXCEPTION 
  WHEN no_data_found THEN 
             RETURN NULL; 
  WHEN OTHERS THEN 
             RAISE; 
END; 

/ 

Вы можете вызвать эту функцию двумя способами, предполагая, что действительны 1,2 f_id s

select func_format_sal(1)  FROM dual;
select func_format_sal(2,'$99999')  FROM dual;

Вот dbfiddle демо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...