Oracle PL/SQL 函数的 varchar2 参数返回 NULL 值

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

我创建了一个返回表的函数。这个函数有 varchar2 参数,真正令人惊讶的是这个参数返回 NULL 值,我无法理解这里发生了什么。

该函数的目的是执行动态SQL查询并返回一个表。

为了简单起见,我删除了所有复杂的代码行。下面的代码仅返回参数值。我需要在IF BLOCK中使用这个参数。但是,我的 if 块总是返回 false,这是因为参数获取 NULL 值。

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

现在执行上面的函数:

select * from traudit04011('This is a parameter that always returns null')

这里出了什么问题。我已经花了 6 个小时来解决这个问题。奇怪的是,如果我将参数的数据类型更改为 INT,该函数就会开始工作。 :)

任何帮助将不胜感激..

oracle plsql oracle-sqldeveloper plsqldeveloper
1个回答
0
投票

您已在查询中使用了具有正常字符串连接的输入参数。

需要在动态查询中直接使用

function_name.input_variable_name
,如下:

sql_statement := 'select traudit04011.XPARAM d1 from dual';

数据库<>小提琴

© www.soinside.com 2019 - 2024. All rights reserved.