sql >> データベース >  >> RDS >> Oracle

PL/SQL 関数の作成と呼び出し

    パイプライン関数 :

    まず、テーブル タイプが必要です:

    create or replace type result_tab as table of varchar2(32767);
    

    次に、コードをパイプライン関数にします:

    create or replace function your_func return result_tab PIPELINED is
    
    rec employees_practice%rowtype;
    sam taxObligations%rowtype;
    socialsecurity number;
    rentallowance number;
    transportation number;
    taxableincome number;
    incometaxliability number;
    netpay number;
    total number;
    totaldeductions number;
    
        begin
        for rec in (select * from employees_practice)
        loop
        socialsecurity:=(5.5/100)*(rec.salary);
        rentallowance:=(20/100)*(rec.salary);
        if(rec.Category='S') 
        then transportation:= 150; 
        else transportation:=100;
        end if;
    
    taxableincome:=rec.Salary-socialsecurity+rentallowance+transportation;
    
    for sam in (select * from taxObligations) 
    loop
    if(taxableincome between sam.Minincome and sam.Maxincome)
    then incometaxliability:= sam.MinimumBracketTax + (taxableincome-sam.Minincome)*(sam.TaxBracketRate/100);
    else incometaxliability:=null;
    end if;
    end loop;
    netpay:= taxableincome-incometaxliability;
    total:= rec.Salary + rentallowance + transportation;
    
    totaldeductions:=socialsecurity + incometaxliability;
    
    -- Here, I used PIPE ROW() to give an output in different format.
    pipe row('what ever you had in your dbms_output command');
    
    end loop; 
    
    return;
    
    end your_func;
    

    これで、次のように呼び出し/クエリを実行できます:

    select * from table(your_func)
    


    1. Webサイトの効率的なヒットカウンターの書き方

    2. カーディナリティがパフォーマンスにどのように影響するかをご覧ください

    3. データがなくてもテーブルからデータを表示!!オラクル

    4. LEFTJOINを使用した削除