动态查询生成不产生结果并导致进程崩溃



我试图在一个PL/SQL脚本中运行一个SQL查询,该脚本采用动态参数,应该返回一个特定的结果。为此,我尝试了EXECUTE IMMEDIATE命令。不幸的是,它总是崩溃,我的变量是varchar。如果它是一个数字,它就可以完美地运行。

这是我尝试的代码:

plsql_request := 'SELECT :x FROM TEST_TABLE WHERE ID = :y';
EXECUTE IMMEDIATE plsql_request INTO plsql_result USING variable_1, '2837123 | hsiae';   

在测试时,它总是在这个星座崩溃。
第二种方法:

plsql_request := 'SELECT ' || variable_1 || ' FROM TEST_TABLE WHERE ID = ''' || variable_2 || '''';
EXECUTE IMMEDIATE plsql_request ;

我根本没有得到任何结果,因此我认为使用动态变量与varchars相结合的查询构建失败了。

任何帮助感谢,
Filip。

不能对列名、表名等对象字面值使用绑定变量。因此,您必须使用第二个方法与|| variable_1 ||拼接动态列名。然而,你应该使用真正的绑定变量:y, USING等等。对于您的谓词值,为了不生成过多的子游标。

所以:

plsql_request := 'SELECT '||variable_1||' FROM TEST_TABLE WHERE ID = :y';
EXECUTE IMMEDIATE plsql_request INTO plsql_result USING '2837123 | hsiae';  

最新更新