2017-04-05 21 views
0

私はOracleにとって新しく、私は二つの異なるストアドプロシージャを書いています。その2つのストアドプロシージャ内のクエリを1つのストアドプロシージャ内の1つのクエリに結合し、それが任意の基準をサポートしていることを確認したいと思います。いくつかの結合を使用して2つのストアドプロシージャを1つに結合する

これらは、ストアドプロシージャです:

procedure usp_testsp1(RC1 OUT RCT1,         
         in_dep_Id IN number, 
         in_Org_id IN number, 
         in_emp_no IN number) 
is 
begin 
     select emp.Name as name,select emp.phone as phone,select emp.Race as 
     race 
     from employee emp 
     JOIN 
     Project prj ON 
     emp.ProjectId=prj.ProjectId 
     JOIN Project_Org Prorg 
     ON prj.ProjectId=Prorg.ProjectId 
     JOIN Organization Org1 
     ON Prorg.OrgId=Org1.OrgId 
     JOIN Organization Org2 
     ON emp.OrgId=Org2.OrgId 
     AND Org2.OrgType=0 
WHERE (upper(emp.emp_No) in (in_emp_No)) 
AND Prorg.OrgId=in_Org_id    
AND Org2.OrgId=in_dep_Id        
end; 


procedure usp_testsp2(RC1 OUT RCT1, 
         in_dep_Id IN number, 
         in_Org_id IN number, 
         in_vendor_id IN raw, 
         in_vendor_startdate IN date, 
         in_vendor_enddate IN date) 
is 
begin 
OPEN RC1 FOR 
select emp.Name as name,select emp.phone as phone,select emp.Race as 
     race 
from 
    from employee emp 
     JOIN 
     Project prj ON 
     emp.ProjectId=prj.ProjectId 
     JOIN Project_Org Prorg 
     ON prj.ProjectId=Prorg.ProjectId 
     JOIN Organization Org1 
     ON Prorg.OrgId=Org1.OrgId 
     JOIN Organization Org2 
     ON emp.OrgId=Org2.OrgId 
     AND Org2.OrgType=0 
     INNER JOIN vendor_Emp 
     ON emp.employeeid=vendor_emp.employeeid 
     INNER JOIN Vendor 
     ON Vendor.VendorId=Vendor_emp.VendorId 
WHERE Prorg.OrgId=in_Org_id    
AND Org2.OrgId=in_dep_Id 
AND Vendor.VendorId=in_vendor_id   
AND vendor.StartDate=in_vendor_startdate AND Vendor.EndDate=in_vendor_enddate  
end; 

私の目標は、私はすべてのパラメータを組み合わせた場合、私はin_emp_no、in_vendor_id、in_vendor_startdateを持っているように、単一のクエリにこれら二つの別々のプロシージャ内のクエリを組み合わせることです、 in_vendor_enddateは、共通のパラメータとは別にパラメータがnullでもかまいません。ヌルではないにもかかわらず、これらのことが残りのクエリに影響しないようにしたいのです 私はin_emp_no = 'xxxx'と一般的な入力しかありません in_vendor_idなどの残りのパラメータはnullです。私は私のクエリは結果をフィルタリングするために1つでもPARAMTERで動作するようにしたいと思い は、クエリ内の列は、限り、あなたが行くのに参加するよう、オプションとして動作させることができ、動的SQLに おかげ BJ

答えて

1

を使用してNOTEWithout を設定し、さまざまな組み合わせでプレイして、すべてが機能することを確認する必要があるかもしれません。

サンプルテーブル

create table sqltest (
empid number, 
name varchar2(10), 
orgid number, 
depid number, 
vendorid number); 

insert into sqltest values(1,'BoB',1,1,21); 
insert into sqltest values(2,'Chuck',1,1,21); 
insert into sqltest values(3,'Mary',1,2,21); 
insert into sqltest values(4,'Jane',1,2,22); 
insert into sqltest values(5,'Rick',2,1,22); 
insert into sqltest values(6,'Samir',2,6,23); 
insert into sqltest values(7,'Kirk',3,6,23); 
insert into sqltest values(8,'Alex',3,9,23); 
commit; 

サンプルPROC

create or replace procedure calltest (
    rc1 out SYS_REFCURSOR, 
    pempid number, 
    porgid number, 
    pdepid number, 
    pvendorid number) 
is 
begin 
open rc1 for 
select * from sqltest 
where 
    (pempid IS NULL OR empid = pempid) and 
    (porgid IS NULL OR orgid = porgid) and 
    (pdepid IS NULL OR depid = pdepid) and 
    (pvendorid IS NULL OR vendorid = pvendorid); 

end; 

サンプル呼び出し

set autoprint on; 

var vcur refcursor; 
declare 
begin 
    calltest(rc1=>:vcur,pempid=>NULL,porgid=>1,pdepid=>NULL,pvendorid=>NULL); 
    --calltest(rc1=>:vcur,pempid=>NULL,porgid=>1,pdepid=>2,pvendorid=>NULL); 
    --calltest(rc1=>:vcur,pempid=>NULL,porgid=>1,pdepid=>2,pvendorid=>22); 
    --calltest(rc1=>:vcur,pempid=>NULL,porgid=>NULL,pdepid=>NULL,pvendorid=>23); 
end; 

サンプル出力1

VCUR 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
EMPID         NAME  ORGID         DEPID         VENDORID         
--------------------------------------- ---------- --------------------------------------- --------------------------------------- --------------------------------------- 
1          BoB  1          1          21          
2          Chuck  1          1          21          
3          Mary  1          2          21          
4          Jane  1          2          22          

サンプル出力2

VCUR 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
EMPID         NAME  ORGID         DEPID         VENDORID         
--------------------------------------- ---------- --------------------------------------- --------------------------------------- --------------------------------------- 
3          Mary  1          2          21          
4          Jane  1          2          22          

サンプル出力3

VCUR 
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 
EMPID         NAME  ORGID         DEPID         VENDORID         
--------------------------------------- ---------- --------------------------------------- --------------------------------------- --------------------------------------- 
4          Jane  1          2          22          

VCUR 
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
EMPID         NAME  ORGID         DEPID         VENDORID         
--------------------------------------- ---------- --------------------------------------- --------------------------------------- --------------------------------------- 
6          Samir  2          6          23          
7          Kirk  3          6          23          
8          Alex  3          9          23          
+0

4は、それは私が私のクエリその思考たくさんで同じものを複製しようとしたパフォーマンスのバックログだっての原因となりますサンプル出力(pempidがNULLであるかempid = pempidである) – Balaji

+0

ローカルで欠落しているインデックス – Balaji

関連する問題