oracle-関数


関数は特定のデータを返すために使用され、関数が確立されると、関数ヘッダにreturn句を含める必要があります.関数にはreturn文が返すデータが含まれている必要があります.常に必要とする計算を関数として書くことができる.関数の呼び出しは式の一部であり、プロセスの呼び出しはPL/SQL文である.
構文:

create  [or  replace]  function  fun_name   ([para_name [in |  out  |  in  out) type, [para_name [in |  out  |  in  out) type[, ….]])
return  type
is |  as  
      
Begin
      
end  fun_name;

説明:
ネーミング仕様:fun_myname
パラメータ宣言:パラメータ名、入出力プロパティ、データ型.
create or replace関数はすでに存在し、replaceです.             
return typeは、データ型を返すことを宣言します.
異常部分なし
--従業員の名前を入力し、従業員の年俸を返します.
create function annual_incomec(name varchar2)   
return number is  
annual_salazy number(7,2);   
begin     
    --       
    select sal*12+nvl(comm, 0) into annual_salazy from emp where ename=name;   
    return annual_salazy;   
end; 
 
関数作成プロセスにコンパイルエラーがある場合はshow errorを使用します.
呼び出し:
1.sqlplusで関数を呼び出す

   var income number   
   call annual_incomec('scott') into: income;   
   print income  
   var income number
   call annual_incomec('scott') into: income;
   print income

declare
   n number(10);
begin
   n:= annual_incomec('scott');

   ----1. 位置表現呼び出し関数
  BEGIN
  dbms_output.put_line(add_three_numbers(2,4,5));
  END;
  ----2. ネーミング表現呼び出し関数
  BEGIN
  dbms_output.put_line(add_three_numbers(b=>3, a=>4,c=>2));
  END;
  ----3. 位置表現と名前付き表現を混合して関数を呼び出す
  BEGIN
  dbms_output.put_line(add_three_numbers(3, b=>4,c=>2));
  END; 
    ----4. 除外表現
  BEGIN
  dbms_output.put_line(add_three_numbers(12,c=>2));
  END;
2.同様にsqlでこの関数を呼び出すことができます.
    select annual_income('SCOTT') from dual;
これによりrs.getInt(1)で返される結果が得られる.
select text from user_の表示source where name = 'GET_SALARY_BY_DEPTNO'(関数名大文字)
drop function get_を削除salary_by_deptno;
関数とプロシージャの比較:
構文の観点から:関数はタイプを返す必要があり、実行コードにはreturn文が必要です.
プロセスと比較して、関数に異常処理部分がなく、
使用の角度から、関数は数学の演算を重視して、同時に演算の結果を重視します.通常、関数の戻り値を変数で受け入れる場合に使用します.プロシージャは、出力属性を持つパラメータを使用して、データを外部に転送します.
PROCEDUREであればSQL/PLUSでEXECUTEでそのPROCEDUREを実行してその実行結果を見ることができますが、
FUNCTIONならSELECT FUNCTION NAME FROMDUAL