更新存储需要用户输入的查询的表

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

我在数据库中有一个表,用于存储用于生成报告的查询。我需要更新表中的查询,当在报告生成期间执行该查询时,它将提示用户输入将根据其生成表的输入。

以下是查询的结构。

UPDATE report_table
SET sql_query = 'SELECT *
FROM book
where value1 = upper(''&testvalue1'') and value2 = upper(''tastvalue2'')'
where report_id = 1;

在 SQL Developer 中执行上述查询时,它提示我输入 value1 和 value2,而应该在应用程序中生成报告时提示。

非常感谢任何有关如何实现这一目标的帮助或想法。

sql oracle plsqldeveloper
1个回答
0
投票

在应用程序中生成报告时应有提示。

SQL 不是这样工作的;它在查询评估期间不会动态接受用户输入。

某些客户端应用程序(SQL*Plus、SQL Developer、Toad 等)可能支持在客户端应用程序处理查询时动态修改查询,在发送到数据库之前,但一旦查询已发送到数据库它按原样处理且未修改。

在您的情况下,

&
表示由客户端应用程序在预处理语句before将其发送到数据库并要求用户输入,然后有效地执行查找和替换时评估的替换变量该语句用用户的输入替换替换变量。然后,它将修改后的语句发送到数据库,并且数据库不知道该语句已被更改,因为所有这些都发生在客户端上。

如果您想阻止客户端应用程序处理替换变量,则:

  • 在客户端应用程序的设置中关闭处理替换变量;或
  • 使用 SQL*Plus 命令
    SET DEFINE OFF

但是,这只会允许客户端应用程序将

&
视为查询的一部分,而不是替换变量;它不会使查询稍后被接受用户输入的数据库修改 - 因为数据库不会这样做。

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