База данных Oracle 11G. У нас есть приложение C#, которое говорит с пакетом PL/SQL, который отправляет пользователю электронное письмо, если выполняется ряд критериев. В этом примере используется таблица PERSON & таблица НАЗНАЧЕНИЯ.Поддержка синтаксиса для пакета базы данных
Здесь логика в настоящее время мы имеем:
create or replace
PACKAGE BODY email_send_pkg
IS
PROCEDURE sp_email_reminder(p_HOURS IN NUMBER,
p_message_cur IN OUT MessageCur)
IS
BEGIN
OPEN p_message_cur
FOR
SELECT a.person_id,
a.appoint_no,
a.appoint_date_time,
p.name,
p.forename,
p.surname,
p.email_addre,
l.location_name,
NVL(l.address1, ''),
NVL(l.address2, ''),
NVL(l.address3, '')
FROM appointment a,
person p,
location l
WHERE a.appoint_date_time > SYSDATE -- only send email for appointments in the future
AND (sa.appoint_date_time - ((1/24) * p_HOURS)) < SYSDATE
AND a.cancel_date IS NULL -- only send email for appointment that have NOT been cancelled
AND a.resched_date IS NULL -- only send email for appointment that have NOT been rescheduled
AND p.person_id = a.person_id -- check correct record on PERSON table & APPOINTMENT table
AND l.location_id = a.location_id -- check correct record on PERSON table & APPOINTMENT table
AND email_addre IS NOT NULL -- only send email if email data exists for the person in question
AND NOT EXISTS --avoid duplicate record
(SELECT *
FROM email_message em
WHERE em.appoint_no = a.appoint_no
AND em.message_type_id = 1 -- (type: example; appointment reminder)
)
ORDER BY appoint_date_time ASC;
END sp_email_reminder;
Предполагая, что все критерии соблюдены, мы затем добавить данные в таблицу, которая опрашиваемого позже в C# приложение для разослать электронные письма.
Мне нужно реализовать дополнительную логику, чтобы сделать еще несколько проверок. Я достаточно незнакомый с PL/SQL, и, конечно, это синтаксис и вам нужен совет по добавлению логики.
В настоящее время, если человек обнаруживает свое назначение, и в настоящее время система не хранит их электронную почту, их просят на прием. После добавления в базу данных (PERSON & таблицы PERSON_AUDIT обновлены) Приложение C# будет опросить, увидеть новое добавленное письмо и отправить электронное письмо лицу, которое уже сидит в приемной для этой встречи .... Что очевидно немного глупо & ненужным.
Итак, мне нужно вставить некоторую логику по строкам: ЕСЛИ EMAIL_ADDRE НЕ БОЛЬШЕ NULL в таблице PERSON_AUDIT на вопрос APPOINT_DATE, затем DONT отправляет электронное письмо.
Я также хотел бы, чтобы электронные письма никогда не отправлялись по субботам или воскресеньям или в праздничные дни, например, в Рождество. (НО все же дайте им уведомление за 72 часа). Я думаю, что решение для этого было бы создать простую таблицу db, полную исключенных дат, и проверить на это, но я не знаю, как реально реализовать это с моими текущими знаниями PL/SQL.
Любые советы по синтаксису или комментариям по текущей логике были бы замечательными! Спасибо.
Решение: (спасибо Starfighter)
AND NOT EXISTS
( SELECT *
FROM audituser.person_a pu
WHERE pu.b_person_id = sa.person_id
AND pu.b_email <> pu.a_email
AND TRUNC(pu.a_last_upd_datetime) = TRUNC(sa.appoint_date)
AND pu.a_email IS NOT NULL
)
Удивительный, я получил это в конце концов, немного отличается, но ваш ответ велик. Благодарю. OP отредактирован. – GrumP