Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-01027:ràng buộc các biến không được phép định nghĩa dữ liệu khi cố gắng sử dụng if elseif

Như lỗi cho biết, bạn không thể sử dụng các biến liên kết ở đây, vì vậy bạn phải nối:

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;

Có lẽ sẽ có thêm một số mã để xử lý trường hợp không phải là Chủ nhật cũng không phải ngày thứ ba của tháng hoặc new_customers bảng không tồn tại.

Chỉnh sửa:đã thêm else điều kiện để kết thúc xử lý nếu cả hai điều kiện ngày đều không được đáp ứng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sử dụng hàm rownum với> đăng nhập oracle

  2. Tổng hợp chuỗi trong Oracle:Nhiều hàng thành một cột

  3. Việc chọn cả MIN và MAX từ Bảng chậm hơn dự kiến

  4. Làm cách nào để bạn gán kết quả của một biểu thức cho một biến thay thế SQL?

  5. APEX:Tải xuống BLOB từ bảng tạm thời