简体   繁体   English

动态查询构建不产生任何结果并导致进程崩溃

[英]Dynamic query building yields no results and crashes process

I am trying to run a SQL query within a PL/SQL script that takes dynamic parameters and should return a specific result.我正在尝试在采用动态参数并应返回特定结果的 PL/SQL 脚本中运行 SQL 查询。 For that I tried the EXECUTE IMMEDIATE command.为此,我尝试了EXECUTE IMMEDIATE命令。 Unfortunately it crashes always my variable is a varchar.不幸的是,它总是崩溃,我的变量是 varchar。 If it is a number instead it runs perfetcly.如果它是一个数字,它会完美运行。

Here is my tried code:这是我尝试过的代码:

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

While testing it crashes always in this constelation.在测试时,它总是在这个星座中崩溃。
Second approch:第二种方法:

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

I do not get any results at all, hence I think the query-building using dynamic variables in combination with varchars fails.我根本没有得到任何结果,因此我认为将动态变量与 varchars 结合使用的查询构建失败了。

Any help apreciated,任何帮助表示赞赏,
Filip.菲利普。

You cannot use a bind variable for an object literal like a column name, table name, etc.. so you must use the second method with ||您不能将绑定变量用于 object 文字,如列名、表名等。因此您必须将第二种方法与 || 一起使用。 variable_1 ||变量_1 || to splice in your dynamic column name.拼接您的动态列名称。 However, you should use real bind variables:y, USING, etc.. for your predicate value in order to not generate an excessive number of child cursors.但是,您应该使用真正的绑定变量:y、USING 等作为谓词值,以免生成过多的子游标。

So, :所以, :

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM