2016-08-29 7 views
0

私は複数のレコードを持つテーブルを持っている、しかし、いくつかのレコードは、次の表から似ているどのように複数の行をカウントし、結果を返すために、PL/SQLのOracleパッケージ内

表1

Code   P1  P2   P3 
W   5  10   20 
S   5  10   20 
W   6  20   35 

場合私は

select * 
from table 1 
where P1=5 and P2=10 and P3=20 

以下のパラメータとしては、W及びSが、paramteresに一致のみW結果を返すP1、P2、P3を通過します。 複数のレコードをすべてカウントし、同様のコードを返すパッケージを作成するにはどうすればよいですか?私はオラクルに慣れていません

+2

をそれを使用しますあなたは達成しようとしています...なぜ「Wのみが一致しますか」?あなたの質問を明確にし、望ましい出力の例を挙げてください。 – Plirkee

+0

Sも同様に一致しません。WとSはパラメータが一致しているため返されますが、2Wに気がつければ返されるのは – doe

+0

なので、提供したクエリと同様の結果を返します。 'P1 = 5、P2 = 10、P3 = 20'の場合、結果は関数(パッケージ内)から得られるはずですか? – Plirkee

答えて

1

これはpipelinedの機能で解決できます。

宣言パッケージと種類

CREATE OR REPLACE PACKAGE mytestpackage AS 

    TYPE my_record is RECORD(
      code  varchar2 
    ); 

    TYPE my_table IS TABLE OF my_record; 

function get_results(par1 number,par2 number,par3 number) RETURN my_table PIPELINED; 

end mytestpackage; 

パッケージ本体

CREATE OR REPLACE PACKAGE BODY as 

    function get_results(par1 number,par2 number,par3 number) RETURN my_table PIPELINED is 
     my_rec my_record:=null; 
     cursor myCursor(myp1 number,myp2 number,myp3 number) is 
     select code from table1 where P1=myp1 and P2=myp2 and P3=myp3 
     ; 

     begin 

     --loop through outputs 

     FOR item IN myCursor(par1,par2,par3) LOOP 
      my_rec:=null; 
      select item.code into my_rec from dual; 
      PIPE ROW(my_rec); 
     end loop; 
     return; 
     end; 
end mytestpackage; 

、そして最後に、それは、WHは非常に明確ではありません

SELECT * FROM TABLE(mytestpackage.get_results(5,10,20)); 
関連する問題