Есть несколько способов, чтобы ответить на ваш вопрос:
ПРЕДОСТЕРЕЖЕНИЯ:
я предположил, что базовые знания PL/SQL.
не имеют IDE передо мной сегодня, и я не ВПО никакого знания вашей схемы и т.д., так что код будет лучшее усилие, и вы будете нуждаться в заменить ваши таблицы песка столбцы и т.д. в него ,
Я предполагаю, что используя DBMS_OUTPUT будет достаточно, чтобы быть достаточно для вашего «исходящего сообщения»
1) Как вы просили, петлю и опрос каждые 10 секунд Это довольно неприятным способ идентификации, когда запись была введена в вашу БД.
CREATE OR REPLACE
FUNCTION check_for_record
AS
-- Declare the cursor that checks for your record
CURSOR db_rec_cur
IS
SELECT 1
FROM <table_name>
WHERE <criteria>;
-- Variable to hold cursor output
v_db_rec db_rec_cur%ROWTYPE;
BEGIN
-- Enable DBMS_OUTPUT
DBMS_OUTPUT.ENABLE(1000000);
-- Start the polling loop
LOOP
-- Output a message when testing for the record
DBMS_OUTPUT.put_line(TO_CHAR(sysdate, 'YYYYMMDDHH24MISS')||': Checking for DB record');
-- Test if the record is in the DB
OPEN db_rec_cur;
FETCH db_rec_cur INTO v_db_rec;
CLOSE db_rec_cur;
-- Exit the polling loop when a record has been found
EXIT WHEN v_db_rec IS NOT NULL;
-- IF the loop has not exited, sleep foir 10 seconds
DBMS_LOCK.sleep(10);
-- End the loop
END LOOP;
EXCEPTION
WHEN others
THEN
-- Check the cursor is closed
IF db_rec_cur%ISOPEN
THEN
CLOSE db_rec_cur;
END IF;
-- Output the error
DBMS_OUTPUT.put_line(SQLERRM);
-- Propagate the error
RAISE;
END check_for_record;
/
2) Используйте триггер базы данных, чтобы уведомить вас, когда запись была вставлена
Если вы ищете конкретные значения, которые были вставлены затем:
CREATE OR REPLACE
TRIGGER recordinsert_trg
AFTER INSERT ON <table_name>
FOR EACH ROW
DECLARE
BEGIN
-- Enable DBMS_OUTPUT
DBMS_OUTPUT.ENABLE(1000000);
-- Check the ":new" values inserted to see if they match your criteria
IF :new.<your_column> = <your_specific_value>
THEN
-- Output a message when testing for the record
DBMS_OUTPUT.put_line(TO_CHAR(sysdate, 'YYYYMMDDHH24MISS')||': Your value was inserted!');
END IF;
EXCEPTION
WHEN others
THEN
-- Output the error
DBMS_OUTPUT.put_line(SQLERRM);
-- Propagate the error
RAISE;
END recordinsert_trg;
/
Если вы просто хотят узнать, когда что-то или что-то было вставлено в ваш стол, тогда:
CREATE OR REPLACE
TRIGGER recordinsert_trg
AFTER INSERT ON <table_name>
DECLARE
BEGIN
-- Enable DBMS_OUTPUT
DBMS_OUTPUT.ENABLE(1000000);
-- Output a message when the record was inserted
DBMS_OUTPUT.put_line(TO_CHAR(sysdate, 'YYYYMMDDHH24MISS')||': A record was inserted!');
EXCEPTION
WHEN others
THEN
-- Output the error
DBMS_OUTPUT.put_line(SQLERRM);
-- Propagate the error
RAISE;
END recordinsert_trg;
/
Надеюсь, это поможет!
Постоянный опрос базы данных звучит как полный перебор. Для этого используйте триггер до/после. –
Вы можете использовать СУБД Schedular. Как только функция запланирована на каждые 10 минут. Если какой-либо вывод RETURN выполняется с помощью функции, вы можете продолжить процесс. –
Я согласен с Фрэнком. Вы можете комбинировать триггеры с системой уведомлений Oracle: http://docs.oracle.com/cd/E11882_01/appdev.112/e41502/adfns_cqn.htm#ADFNS018 или http://docs.oracle.com/cd/E11882_01/appdev 0,112/e41502/adfns_publish.htm # ADFNS827 –