Опишите идею проекта:
Я работаю в системе, которая работает на базе данных Oracle версии 8i. где я хотел бы выполнить запрос, который выполняется автоматически ежемесячно (с использованием php или java), чтобы получить некоторые данные о платежах от некоторых пользователей в следующем месяце, а затем опубликовать эти данные в Google Firebase.
Опишите мой вопрос:
Вместо того, чтобы запускать код вручную, нажав кнопку или запускать скрипт вручную, я хотел бы знать, как автоматически выполнять запрос в определенный день каждого месяца. Для извлечения данных из Oracle и публикации данных в Firebase. но не перегружая процессор на сервере, зацикливая навсегда.
Я не знаю, может ли это быть сделано в коде php, или я должен использовать внешнюю программу или службу для автоматического запуска моей функции в определенное время
Пример псевдокода:
очень простой пример, чтобы объяснить мой процесс, фактический код будет более организованным. ваши идеи очень ценятся
// some Proramming language API to call myFunction() automatically
/* this is what I need */
// check date
if (today() = 20-currentMonth-currentYear)
(
myFunction()
)
function myFunction()
{
//conneting to database
connect to oracle(connectionURL, username, password)
// running connection
run connection
// executing updated query
execute query(Select * from tableName where date 01-nextMonth-currentYear)
// fetching query results
Loop throw query result
// prepare JSON format
add result to json(object or array)
// close database connection
close oracle connection// sending json to firebase
send json result to Firebase RestAPI
}
язык программирования:
PHP
Черт возьми, 8i? Это древняя часть программного обеспечения.
В любом случае: вам не нужен ни PHP, ни внешняя программа — все, что вам нужно — это запланированная работа в базе данных. DBMS_JOB должен сделать это. Вот документация 8i для этого пакета: https://docs.oracle.com/cd/A87860_01/doc/server.817/a76956/jobq.htm#5727
Вот пример того, как это сделать:
SQL> set serveroutput on
SQL> -- creating a dummy procedure; yours would collect data
SQL> create or replace procedure p_test
2 is
3 begin
4 null;
5 end p_test;
6 /
Procedure created.
SQL> -- schedule a job. NEXT_DATE says when it is executed for the first time,
SQL> -- while INTERVAL says when to re-execute it -> monthly, on 5th of every month,
SQL> -- at 14:30
SQL> declare
2 x number;
3 begin
4 sys.dbms_job.submit (
5 job => x,
6 what => 'p_test;',
7 next_date => to_date ('05.12.2017 14:30:00', 'dd.mm.yyyy hh24:mi:ss'),
8 interval => 'add_months(to_date(''05.12.2017'', ''dd.mm.yyyy''), 1) + 14 / 24 + 30 / (24*60)',
9 no_parse => false);
10 sys.dbms_output.put_line ('Job Number is: ' || to_char (x));
11 commit;
12 end;
13 /
Job Number is: 2895612
PL/SQL procedure successfully completed.
SQL> -- check job info
SQL> select * from user_jobs where job = 2895612;
Теперь, как собирать данные. К сожалению, я не знаю, как перенести его в Firebase (если бы мне пришлось, я бы назвал следующие ключевые слова: ссылка на базу данных, гетерогенные сервисы. Или, конечно, Google для этого). Надеюсь, кто-то еще сможет помочь.
Других решений пока нет …