ORACLE は初めてです。助けてください 日付に基づいてレコードを取得するクエリを実行しようとしています。
日付が月曜日の場合、クエリは 3 回実行されます。つまり、月曜日、日曜日、土曜日 (前日も) は他の日 (火曜日から木曜日は同じ日のみ) です。
ORACLE は初めてです。助けてください 日付に基づいてレコードを取得するクエリを実行しようとしています。
日付が月曜日の場合、クエリは 3 回実行されます。つまり、月曜日、日曜日、土曜日 (前日も) は他の日 (火曜日から木曜日は同じ日のみ) です。
まず、クエリを 3 回実行する場合は、プレーン以外の方法で実行する必要があります。SQL: PL-SQL, Java, C#, something.
ただし、土曜と日曜の数字を月曜の数字に含めたい場合は、CASE ステートメントなどを実行して、土曜と日曜を月曜に変更する必要があります。
case when (trim(to_char((date), 'Day', 'NLS_DATE_LANGUAGE=ENGLISH'))
in ('Saturday', 'Sunday', 'Monday')) then 'Monday'
else trim(to_char((date), 'Day', 'NLS_DATE_LANGUAGE=ENGLISH'))
end
日付に基づいてレコードを取得するクエリを実行しようとしています
カレンダーに基づくスケジューリングのために、Oracle はDBMS_SCHEDULERを提供します。
たとえば、次のジョブは 1 時間ごとに実行されます。
SQL> BEGIN
2 DBMS_SCHEDULER.DROP_JOB (JOB_NAME => 'test_full_job_definition');
3 END;
4 /
PL/SQL procedure successfully completed.
SQL>
SQL> BEGIN
2 DBMS_SCHEDULER.create_job (
3 job_name => 'test_full_job_definition',
4 job_type => 'PLSQL_BLOCK',
5 job_action => 'BEGIN my_job_procedure; END;',
6 start_date => SYSTIMESTAMP,
7 repeat_interval => 'freq=hourly; byminute=0; bysecond=0;',
8 end_date => NULL,
9 enabled => TRUE,
10 comments => 'Job defined entirely by the CREATE JOB procedure.');
11 END;
12 /
PL/SQL procedure successfully completed.
SQL>
SQL> SELECT JOB_NAME, ENABLED FROM DBA_SCHEDULER_JOBS where job_name ='TEST_FULL_JOB_DEFINITION'
2 /
JOB_NAME ENABL
---------------------------------------- -----
TEST_FULL_JOB_DEFINITION TRUE
SQL>
その他の例はこちら