1. 程式人生 > >PL-SQL經典試題

PL-SQL經典試題

6.1 賦值語句:通過變數實現查詢語句

declare

  v_emp_record employees%rowtype;

  v_employee_id employees.employee_id%type;

begin

  --使用賦值符號位變數進行賦值

  v_employee_id := 186;

  --通過 select ... into ... 語句為變數賦值

 select * into v_emp_record

 from employees

 where employee_id = v_employee_id;

 -- 列印變數的值

 dbms_output.put_line(v_emp_record.last_name || ', ' || v_emp_record.email || ', ' ||  

v_emp_record.salary || ', ' ||  v_emp_record.job_id  || ', ' || v_emp_record.hire_date);

end;

6.2  通過變數實現DELETE、INSERT、UPDATE等操作

declare

  v_emp_id employees.employee_id%type;

begin

  v_emp_id := 109;

  delete from employees

  where employee_id = v_emp_id;

  --commit;

end;

*******************************************************************************

流程控制

*******************************************************************************

-----------------------------------------------------

條件判斷

-----------------------------------------------------

7. 使用 IF ... THEN ... ELSIF ... THEN ...ELSE ... END IF;

要求: 查詢出 150號 員工的工資, 若其工資大於或等於 10000 則列印 'salary >= 10000';

若在 5000 到 10000 之間, 則列印 '5000<= salary < 10000'; 否則列印 'salary < 5000'

(方法一)

declare

  v_salary employees.salary%type;

begin

  --通過 select ... into ... 語句為變數賦值

 select salary into v_salary

 from employees

 where employee_id = 150;

 dbms_output.put_line('salary: ' || v_salary);

 -- 列印變數的值

 if v_salary >= 10000 then

    dbms_output.put_line('salary >= 10000');

 elsif v_salary >= 5000 then

    dbms_output.put_line('5000 <= salary < 10000');

 else

    dbms_output.put_line('salary < 5000');

 end if;

(方法二)

declare

     v_emp_name employees.last_name%type;

     v_emp_sal employees.salary%type;

     v_emp_sal_level varchar2(20);

begin

     select last_name,salary into v_emp_name,v_emp_sal from employees where employee_id = 150;

     if(v_emp_sal >= 10000) then v_emp_sal_level := 'salary >= 10000';

     elsif(v_emp_sal >= 5000) then v_emp_sal_level := '5000<= salary < 10000';

     else v_emp_sal_level := 'salary < 5000';

     end if;

     dbms_output.put_line(v_emp_name||','||v_emp_sal||','||v_emp_sal);

end;

7+ 使用 CASE ... WHEN ... THEN ...ELSE ... END 完成上面的任務

declare

       v_sal employees.salary%type;

       v_msg varchar2(50);

begin     

       select salary into v_sal

       from employees

       where employee_id = 150;

       --case 不能向下面這樣用

       /*

       case v_sal when salary >= 10000 then v_msg := '>=10000'

                  when salary >= 5000 then v_msg := '5000<= salary < 10000'

                  else v_msg := 'salary < 5000'

       end;

       */

       v_msg :=

             case trunc(v_sal / 5000)

                  when 0 then 'salary < 5000'

                  when 1 then '5000<= salary < 10000'

                  else 'salary >= 10000'

             end;

       dbms_output.put_line(v_sal ||','||v_msg);

end;

8. 使用 CASE ... WHEN ... THEN ... ELSE ... END;

要求: 查詢出 122 號員工的 JOB_ID, 若其值為 'IT_PROG', 則列印 'GRADE: A';

'AC_MGT', 列印 'GRADE B',

'AC_ACCOUNT', 列印 'GRADE C';

否則列印 'GRADE D'

declare

       --宣告變數

       v_grade char(1);

       v_job_id employees.job_id%type;

begin

       select job_id into v_job_id

       from employees

       where employee_id = 122;

       dbms_output.put_line('job_id: ' || v_job_id);

       --根據 v_job_id 的取值, 利用 case 字句為 v_grade 賦值

       v_grade :=  

               case v_job_id when 'IT_PROG' then 'A'

                             when 'AC_MGT' then 'B'

                             when 'AC_ACCOUNT' then 'C'

                             else 'D'

                end;

       dbms_output.put_line('GRADE: ' || v_grade);

end;

-----------------------------------------------------

迴圈結構

-----------------------------------------------------

9. 使用迴圈語句列印 1 - 100.(三種方式)

1).  LOOP ... EXIT WHEN ... END LOOP

declare

       --初始化條件

       v_i number(3) := 1;

begin

       loop

       --迴圈體

        dbms_output.put_line(v_i);

--迴圈條件

        exit when v_i = 100;

--迭代條件

        v_i := v_i + 1;

       end loop;

end;

2). WHILE ... LOOP ... END LOOP

declare

       --初始化條件

       v_i number(3) := 1;

begin

       --迴圈條件

       while v_i <= 100 loop

     --迴圈體

             dbms_output.put_line(v_i);

     --迭代條件

             v_i := v_i + 1;

       end loop;

end;

3).

begin

       for i in 1 .. 100 loop

             dbms_output.put_line(i);

       end loop;

end;

本教程由尚矽谷教育大資料研究院出品,如需轉載請註明來源。