oracle課堂收錄-參數

在創建存儲過程時,通過使用參數可以使程序單元變得很靈活,參數是一種向程序單元輸入和輸出數據的機制,存儲過程可以接受和返回零到多個參數。

1.IN參數

該類型的參數值由調用者傳入,並且只能被存儲過程讀取。

SQL> create or replace procedure add_employee(
  2  id_param in number,
  3  name_param in varchar2,
  4  job_param in varchar2,
  5  hire_param in date,
  6  salary_param in number
  7  )is
  8  begin
  9  insert into scott.emp(empno,ename,job,hiredate,sal)
 10  values(id_param,name_param,job_param,hire_param,salary_param);
 11  end add_employee;
 12  /

過程已創建。

通過名稱傳遞發傳遞參數

SQL> alter session set nls_date_format='yyyy-mm-dd';

會話已更改。

SQL> begin
  2  add_employee(id_param=>8000,name_param=>'ATG',
  3               job_param=>'CLERK',hire_param=>'1997-12-20',
  4               salary_param=>1500);
  5  end;
  6  /

PL/SQL 過程已成功完成。
通過位置傳遞法傳遞參數

SQL> exec add_employee(8021,'劉麗','SALESMAN','1995-10-17',2000);

PL/SQL 過程已成功完成。
還可以採用混合表示法傳遞參數。

2.OUT參數
OUT類型的參數由存儲過程傳入值,然後由用戶接受參數值。
SQL> create or replace procedure search_employee(
  2     empno_param in number,
  3     name_param out scott.emp.ename%type,
  4     salary_param out scott.emp.sal%type
  5  )is
  6  begin
  7     select ename,sal
  8     into name_param,salary_param
  9     from scott.emp
 10     where empno=empno_param;
 11  exception
 12     when no_data_found then
 13         name_param:='NULL';
 14         salary_param:=-1;
 15     dbms_output.put_line('未找到指定編號的員工信息!');
 16  end search_employee;
 17  /

過程已創建。
因爲過程中有返回值,所以調用它時必須提供能夠接受返回值的變量。
調用剛纔創建的存儲過程search_employee
SQL> variable name varchar2(10);
SQL> variable sal number;
SQL> exec search_employee(7499,:name,:sal);

PL/SQL 過程已成功完成。

查看執行結果
SQL> print name

NAME
--------------------------------
ALLEN

SQL> print sal

       SAL
----------
      1600

也可以通過SELECT語句檢索綁定的變量值
SQL> select :name,:sal
  2  from dual;

:NAME                                  :SAL
-------------------------------- ----------
ALLEN                                  1600

在匿名程序塊重調用存儲過程search_employee
SQL> set serverout on
SQL> declare
  2  name scott.emp.ename%type;
  3  sal scott.emp.sal%type;
  4  begin
  5     search_employee(7499,name,sal);
  6     dbms_output.put_line('name:'||name);
  7     dbms_output.put_line('sal:'||sal);
  8  end;
  9  /
name:ALLEN
sal:1600

PL/SQL 過程已成功完成。
在調用具有OUT參數的存儲過程時,必須爲OUT參數提供變量,即使OUT參數在過程中沒有設置返回值,調用時也要爲其提供接收變量,否則報錯。

3.IN OUT參數
IN OUT參數在調用過程時,既可以向該類型的參數傳入值,也可以從該參數接收值。
舉個栗子,交換兩個數據的位置
SQL> create or replace procedure swap(
  2     num1_param in out number,
  3     num2_param in out number) is
  4     var_temp number;
  5  begin
  6     var_temp:=num1_param;
  7     num1_param:=num2_param;
  8     num2_param:=var_temp;
  9  end swap;
 10  /

過程已創建。

在栗子中SWAP過程爲了交換兩個變量的值,需要同時向它傳入兩個參數,交換完之後還需要同時返回兩個參數。
匿名程序塊調用SWAP存儲過程
SQL> set serverout on
SQL> declare
  2     var_max number:=23;
  3     var_min number:=45;
  4  begin
  5     if var_max<var_min then
  6             swap(var_max,var_min);
  7     end if;
  8     dbms_output.put_line(var_max||'>'||var_min);
  9  end;
 10  /
45>23

PL/SQL 過程已成功完成。























發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章