因為如P_1,P_2 為空,那SELECT * FROM EMP
WHERE EMP_ID=P_1 AND EMP_NO=P_2;
就會查不到數據

解决方案 »

  1.   

    CREATE OR REPLACE PROCEDURE TEST(
       P_1   IN   VARCHAR2 default null,
       P_2   IN  VARCHAR2 default null
    )
    AS
       CURSOR c_TEST
       IS
    SELECT * FROM EMP
    WHERE EMP_ID=nvl(P_1,0) AND EMP_NO=nvl(P_2,0);nvl函数判断是否为空
      

  2.   

    If P_1 Is Null Then
        ...
      Else 
        ...
      End If;If P_2 Is Null Then
        ...
      Else 
        ...
      End If;
      

  3.   

    我的意思是如果 p_1 為空 ,則emp_id 就不限制條件
      

  4.   

    CURSOR c_TEST
       IS
    SELECT * FROM EMP
    WHERE EMP_ID=P_1 AND EMP_NO=P_2;
    在變量聲明處,不能用 if 語句
      

  5.   

    SELECT * FROM EMP
    WHERE decode(P_1,null,0,EMP_ID,1,0)=1 and  decode(P_2,null,0,EMP_NO,1,0)=1;
      

  6.   

    sorry ,没注意打错一点:
    SELECT * FROM EMP
    WHERE decode(P_1,null,1,EMP_ID,1,0)=1 and  decode(P_2,null,1,EMP_NO,1,0)=1;
      

  7.   

    建议你用游标变量!
    引用版主的东西:
    --包头
    create or replace package dinya_pkg_test
    as
      type myCursor is ref cursor;
      function get(p_id number) return myCursor;
    end dinya_pkg_test;
    --包体
    create or replace package body dinya_pkg_test 
    as
    --******************************************************************
      --输入ID 返回记录集的函数
      function get(p_id number) return myCursor is
         rc myCursor;
         strsql varchar2(200);
      begin
         if p_id=0 then 
            open rc for select a.user_name from fnd_user a ;  
         else
            strsql:='select a.user_name from fnd_user a where a.user_id=:p_id';
            open rc for strsql using p_id;
         end if;
         return rc;  
         end get;
         
    end dinya_pkg_test;
      

  8.   


    select * from EMP
    where decode(P_1,null,1,EMP_ID)=decode(P_1,null,1,P_1)
    and decode(P_2,null,1,EMP_NO)=decode(P_2,null,1,P_2);
      

  9.   


     請問 HorizonXR(地平线)  這樣寫會不會影響速度?