Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

शेड्यूलिंग के लिए ऑरैकल टेबल में रिकॉर्ड डालने की जरूरत है

मूल रूप से, यह पंक्ति जनरेटर . के बारे में है तकनीक के रूप में आपको पंक्तियों की संख्या उत्पन्न करनी चाहिए कुछ इनपुट मापदंडों के आधार पर। यहाँ एक विकल्प है।

लक्ष्य तालिका:

SQL> create table t_schedule (datum date, type varchar2(10));

Table created.

प्रक्रिया जो पंक्तियाँ उत्पन्न करेगी; सरलता के लिए, त्रैमासिक शेड्यूल को साप्ताहिक और दैनिक शेड्यूल से अलग किया जाता है:

SQL> create or replace procedure p_schedule
  2    (par_date_from in date, par_date_to in date, par_type in varchar2)
  3  is
  4  begin
  5    if par_type in ('daily', 'weekly') then
  6       insert into t_schedule (datum, type)
  7       select par_date_from + (case when par_type = 'weekly' then 7 else 1 end) * (level - 1) as datum,
  8              par_type
  9       from dual
 10       connect by level <= ceil((par_date_to - par_date_from + 1) /
 11                                 case when par_type = 'weekly' then 7 else 1 end);
 12    elsif par_type in ('monthly', 'quarterly', 'annually') then
 13       insert into t_schedule (datum, type)
 14       select add_months(par_date_from, case when par_type = 'monthly'   then 1
 15                                             when par_type = 'quarterly' then 3
 16                                             when par_type = 'annually'  then 12
 17                                        end * (level - 1)) as datum,
 18              par_type
 19       from dual
 20       connect by level <= ceil(months_between(par_date_to, par_date_from) /
 21                                        case when par_type = 'monthly'   then 1
 22                                             when par_type = 'quarterly' then 3
 23                                             when par_type = 'annually'  then 12
 24                                        end);
 25    end if;
 26  end;
 27  /

Procedure created.

SQL>

परीक्षण:दैनिक कार्यक्रम:

SQL> exec p_schedule(date '2021-01-01', date '2021-01-25', 'daily');

PL/SQL procedure successfully completed.

परीक्षण:साप्ताहिक कार्यक्रम:

SQL> exec p_schedule(date '2021-01-01', date '2021-01-25', 'weekly');

PL/SQL procedure successfully completed.

परीक्षण:त्रैमासिक अनुसूची:

SQL> exec p_schedule(date '2021-01-01', date '2021-10-25', 'quarterly');

PL/SQL procedure successfully completed.

परिणाम:प्रकार . द्वारा पंक्तियों में अंतर करें :

SQL> select * from t_schedule order by type, datum;

DATUM      TYPE
---------- ----------
01.01.2021 daily
02.01.2021 daily
03.01.2021 daily
04.01.2021 daily
05.01.2021 daily
06.01.2021 daily
07.01.2021 daily
08.01.2021 daily
09.01.2021 daily
10.01.2021 daily
11.01.2021 daily
12.01.2021 daily
13.01.2021 daily
14.01.2021 daily
15.01.2021 daily
16.01.2021 daily
17.01.2021 daily
18.01.2021 daily
19.01.2021 daily
20.01.2021 daily
21.01.2021 daily
22.01.2021 daily
23.01.2021 daily
24.01.2021 daily
25.01.2021 daily
01.01.2021 quarterly
01.04.2021 quarterly
01.07.2021 quarterly
01.10.2021 quarterly
01.01.2021 weekly
08.01.2021 weekly
15.01.2021 weekly
22.01.2021 weekly

33 rows selected.

SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle पाइपलाइन फ़ंक्शन

  2. PDO को Oracle डेटाबेस से कनेक्ट करें

  3. स्प्रिंग डेटा जेपीए के साथ संग्रहित प्रक्रिया को कॉल करते समय सरणी में कैसे पास करें?

  4. स्प्रिंग बूट एप्लिकेशन के लिए स्कीमा.एसक्यूएल में मौजूद होने पर ड्रॉप टेबल का उपयोग करने में असमर्थ

  5. पीएल/एसक्यूएल के लिए कोड कवरेज