Хорошо, я написал основную функцию в оракуле, чтобы вернуть текущего сотрудника на основе идентификатора клиента и указанной даты.Несколько входов в параметры функции Oracle oracle
Он работает по назначению.
FUNCTION get_worker_new_test (p_id IN VARCHAR2, p_date IN DATE, w_type IN
VARCHAR2) RETURN VARCHAR2 IS
CURSOR c1 IS
SELECT
O_RELATIONSHIPS.ID
FROM o_relationships
WHERE rel_source_per_gro_id = p_id
AND rel_rty_code in (w_type)
AND p_date BETWEEN rel_start_date AND NVL(rel_end_date, SYSDATE)
ORDER BY rel_start_date DESC;
l_name VARCHAR2(70) ;
BEGIN
OPEN c1;
FETCH c1 INTO l_name;
CLOSE c1;
RETURN l_name;
END;
Так, например, запрос, как это:
SELECT
CLIENT,
get_worker_new_test(CLIENT,sysdate,'WORKER')
FROM TABLE
бы вернуть что-то вроде:
Client1 | A WORKER
Однако мне было интересно узнать, можно ли запросить функцию, чтобы вернуть последнего работника из нескольких разных типов работников.
Так, например, я бы написать запрос так:
SELECT
CLIENT,
get_worker_new_test(CLIENT,sysdate,'WORKER,CLERK,MANAGER')
FROM TABLE
И было бы вернуть:
client1 | A MANAGER
Если назначенным последним рабочим типом был менеджер. Я думаю, мне нужна функция, которая будет разделять строку на отдельные записи, но даже тогда я не уверен, есть ли лучший способ обойти это. Любые советы или рекомендации будут оценены.
Спасибо.
Почему потребность в функции вообще? Почему бы просто не присоединиться, когда вам нужно присоединиться? Не большой поклонник функций, которые просто скрывают SQL-запросы. Одна из проблем - это то, с чем вы сталкиваетесь, вам постоянно нужно учитывать растущие возможности пользовательских предикатов и придерживаться вашей функции. Я не буду касаться проблем с производительностью. – tbone
Обычно я использую объединения, но я нахожу, что это информация, которую я постоянно использую в своих отчетах. Эта функция предназначена для меня и другого коллеги, пользователи не имеют доступа к ним. - Если у вас есть другие предложения, кроме функции, то я рад их услышать, но, вероятно, 90% отчетов, которые я пишу, обычно должны иметь в них какую-то информацию о работниках (рабочий, работник обзора, сотрудник и т. Д.), , – bawpie
[Dynamic SQL] (http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/dynamic.htm) – GriffeyDog