如果在plsql中参数不为null,如何应用和条件

时间:2018-04-17 15:54:03

标签: sql oracle plsql

procedure get_documents
(pi_id in varchar2,
-- Inside Outside param
 pi_entry_pemit in varchar2,
 po_resultSet out sys_refcursor)
is
begin
OPEN po_resultSet FOR
select typ.description,
typ.attch_type,
typ.code_sp_type,
from vtr_t_doc_atch_type_master typ,
vtr_t_doc_atch_job_mapping jmap
where typ.active = 'Y'
if(pi_entry_pemit is not null)
{
  --then add this 'and' operatior condition
and jmap. inside_outside_type = pi_entry_pemit
}

那么如果传递的参数不是NULL,我该如何添加AND运算符?

3 个答案:

答案 0 :(得分:0)

你在谈论这样的事吗?

where typ.active = 'Y'
and ((pi_entry_pemit is not null and jmap.inside_outside_type = pi_entry_pemit) 
     OR (pi_entry_pemit is null))

答案 1 :(得分:0)

在过程的最开始,添加if条件以检查param是否为null。 如果为null,则使用exit函数退出程序。

EG。 如果(param为null)则退出;

答案 2 :(得分:0)

您可以在where子句中使用CASE语句来检查下面的条件

CREATE OR REPLACE PROCEDURE get_documents(
pi_id IN VARCHAR2,
pi_entry_pemit IN VARCHAR2,
po_resultSet OUT sys_refcursor)
IS
BEGIN
 OPEN po_resultSet FOR 
  SELECT typ.description, typ.attch_type, typ.code_sp_type
  FROM vtr_t_doc_atch_type_master typ, vtr_t_doc_atch_job_mapping jmap 
  WHERE typ.active = 'Y'
  AND jmap.inside_outside_type = CASE WHEN pi_entry_pemit is null then 
jmap.inside_outside_type else pi_entry_pemit;
END;