Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

ORA-01027:variabel ikat tidak diizinkan untuk definisi data saat mencoba menggunakan if elseif

Seperti yang dikatakan kesalahan, Anda tidak dapat menggunakan variabel bind di sini, jadi Anda harus menggabungkan:

create or replace procedure create_dates_testing 
    ( dummy_variable varchar2 default to_char(sysdate,'YYYYMMDD') )
as
    day_of_month varchar2(255) := extract(day from sysdate);
    today varchar2(255) := to_char(sysdate +1, 'fmDAY', 'nls_date_language = English');
    start_date date;
    next_start_date date;
begin
    if today = 'SUNDAY' then
        -- select yesterday
        start_date      := trunc(sysdate) - interval '1' day;
        next_start_date := trunc(sysdate);

    elsif day_of_month = 3 then
        -- select the whole of last month
        start_date      := trunc(sysdate, 'MM') - interval '1' month;
        next_start_date := trunc(sysdate, 'MM') - interval '1' month;
    else
        return;
    end if;

    execute immediate 'drop table new_customers';

    execute immediate 'create table new_customers as 
    select id, client_name, invoice_date 
    from clients table
    where transactiondate >= date '''  || to_char(start_date,'YYYY-MM-DD') ||
    ''' and transactiondate < date ''' || to_char(next_start_date,'YYYY-MM-DD') ||'''';

end create_dates_testing;

Agaknya akan ada beberapa kode lagi untuk menangani kasus di mana bukan hari Minggu atau tanggal tiga bulan, atau new_customers tabel tidak ada.

Sunting:menambahkan else kondisi untuk mengakhiri pemrosesan jika kondisi tanggal tidak terpenuhi.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql dan Oracle:perbarui beberapa tabel dari subquery umum

  2. cx_Oracle dengan otentikasi Windows

  3. Penanganan DML dan Pengecualian - Oracle

  4. konversi oracle to_date menunjukkan literal tidak cocok dengan format string

  5. Pindahkan data dari oracle ke HDFS, proses dan pindahkan ke Teradata dari HDFS