PL/SQL 我做錯了什麼? (PL/SQL What am I doing wrong?)


問題描述

PL/SQL 我做錯了什麼? (PL/SQL What am I doing wrong?)

DECLARE
updated_commission float;
cur_var a%rowtype;
BEGIN
dbms_output.put_line('EMPLOYEE_NO     FNAME     LNAME     COMMISSION');
dbms_output.put_line('‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑');
WHILE cur_var%found AND COMMISSION IS NOT NULL
LOOP
CASE BRANCH_NO
  WHEN 100 THEN updated_commission := COMMISSION * 1.10
  WHEN 101 THEN updated_commission := COMMISSION * 1.15
  WHEN 104 THEN updated_commission := COMMISSION * 1.20
  dbms_output.put_line(cur_var.EMPLOYEE_NO||'       '||cur_var.FNAME||'       '||cur_var.LNAME||'     
'||cur_var.COMMISSION||'      '||cur_var.updated_commission);
END LOOP;
END;

(一直給我一個關於我的 CASE 語句的錯誤,我無法找出問題所在,請幫忙) PS(必須是一個 while 循環來分配)


參考解法

方法 1:

How about this? I fixed only the CASE, didn't look at other stuff as we don't know anything about CUR_VAR ‑ how it gets its value, what COMMISION is etc..

DECLARE
  updated_commission float;
  cur_var a%rowtype;
BEGIN
  dbms_output.put_line('EMPLOYEE_NO     FNAME     LNAME     COMMISSION');
  dbms_output.put_line('‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑');
  WHILE cur_var%found AND COMMISSION IS NOT NULL
  LOOP
    updated_commision := commision * 
      case when branch_no = 100 then 1.10
           when branch_no = 101 then 1.15
           when branch_no = 104 then 1.20
      end;
  dbms_output.put_line(cur_var.EMPLOYEE_NO||'       '||cur_var.FNAME||'       '||cur_var.LNAME||'     
    '||cur_var.COMMISSION||'      '||cur_var.updated_commission);
  END LOOP;
END;

方法 2:

As another way to fix your CASE statement you might consider:

DECLARE
  updated_commission  NUMBER;
  cur_var             a%rowtype;
BEGIN
  dbms_output.put_line('EMPLOYEE_NO     FNAME     LNAME     COMMISSION');
  dbms_output.put_line('‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑');

  WHILE cur_var%found AND COMMISSION IS NOT NULL
  LOOP
    CASE BRANCH_NO
      WHEN 100 THEN updated_commission := COMMISSION * 1.10
      WHEN 101 THEN updated_commission := COMMISSION * 1.15
      WHEN 104 THEN updated_commission := COMMISSION * 1.20
    END CASE;

    dbms_output.put_line(cur_var.EMPLOYEE_NO || '       ' ||
                         cur_var.FNAME       || '       ' ||
                         cur_var.LNAME       || '         ' ||
                         cur_var.COMMISSION  || '      ' ||
                         updated_commission);
  END LOOP;
END;

(by mjboescheLittlefootBob Jarvis ‑ Слава Україні)

參考文件

  1. PL/SQL What am I doing wrong? (CC BY‑SA 2.5/3.0/4.0)

#plsql #oracle






相關問題

RAISE_APPLICATION_ERROR 不返回消息 (RAISE_APPLICATION_ERROR doesn't return the message)

PL/SQL 塊和循環練習 (PL/SQL block and LOOP exercise)

如何從列中僅提取編號的行 (How to extract only numbered rows from a column)

如何編寫一個程序來自動執行一組查詢 (How to write a procedure to execute set of queries automatically)

使用 DBMS_OUTPUT.put_line 顯示錯誤消息 (Display error message using DBMS_OUTPUT.put_line)

如何編寫將Oracle數據庫表數據導出到excel文件的程序 (How to write a Procedure which exports Oracle database table data into excel file)

如何重載對像類型中的方法 (How to overload a method in an object type)

有沒有辦法以編程方式從 Oracle 包中提取表引用? (Is there a way to programmatically extract table references from an Oracle package?)

批量插入 Oracle 數據庫:哪個更好:FOR 游標循環還是簡單的選擇? (Bulk Insert into Oracle database: Which is better: FOR Cursor loop or a simple Select?)

如何使用參數“foo 表”執行 SP? (How to execute SP with arguments 'table of foo'?)

PL/SQL 我做錯了什麼? (PL/SQL What am I doing wrong?)

PL/SQL 顯示帶有條件的表中的數據 (PL/SQL Display Data From a Table with a Condition)







留言討論