我的 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
您不能像选择表格一样从标准函数中进行选择。将函数视为一列并从对偶中选择:
select traudit04011('service_date') from dual;