IF 条件在 Oracle PL/SQL 中无法正常工作

问题描述 投票:0回答:1

我的 IF 条件总是执行 ELSE 语句。我找不到它返回“否”的原因。它应该返回“是”。

看起来参数XPARAM正在获取NULL值,但为什么?

注意:我必须从该函数返回一个表,因为变量 sql_statement 将是动态的。

下面是代码和输出:

create or replace function traudit04011 (
XPARAM IN VARCHAR2)
return VARCHAR2 sql_macro as
 
sql_statement varchar2(5000);
vc_condition varchar(1000);
p_search_by1 varchar(100) := '';
 
 
begin 
   
IF  XPARAM is not NULL THEN 
vc_condition:='yes';
ELSE
vc_condition:='No';
END IF;
 
sql_statement := 'select ''' || vc_condition || ''' d1 from dual'; -- In real world, instead of XPARAM there will be a variable storing dynamic query
  
return sql_statement; 
 
end;

输出:

我尝试用局部变量替换参数,但输出是相同的:

create or replace function traudit04011 (
XPARAM VARCHAR2)
return VARCHAR2 sql_macro as
 
sql_statement varchar2(5000);
vc_condition varchar(1000);
p_search_by1 varchar(100) := '';
 
 
begin 
p_search_by1:= XPARAM;
   
IF  p_search_by1 is not NULL THEN 
vc_condition:='yes';
ELSE
vc_condition:='No';
END IF;
 
sql_statement := 'select ''' || vc_condition || ''' d1 from dual'; -- In real world, instead of XPARAM there will be a variable storing dynamic query
  
return sql_statement; 
 
end;

我正在通过以下语句执行上述函数:

从traudit04011('service_date')中选择*

非常感谢任何帮助。我在这里完全被封锁了。

SQlFiddle --- > https://dbfiddle.uk/j537Ye0K

oracle plsql plsqldeveloper
1个回答
0
投票

您不能像选择表格一样从标准函数中进行选择。将函数视为一列并从对偶中选择:

select traudit04011('service_date') from dual;
© www.soinside.com 2019 - 2024. All rights reserved.