【问题标题】:Provide a message prompt for user input in SQL Developer 3.1.07在 SQL Developer 3.1.07 中为用户输入提供消息提示
【发布时间】:2019-01-03 13:06:25
【问题描述】:

我试图让用户将日期输入到替换变量中,但希望提示消息提示用户以正确的格式输入日期。

SELECT claimdate, assessmentid
FROM claimassessment
WHERE claimdate > to_date('&Date_as_yyyy_mm_dd', 'yyyy-mm-dd');

我一直在阅读,我应该使用 ACCEPT 和 PROMPT 关键字,但我使用的是 SQL Developer 3.1.07,并且无法识别这些关键字。我如何让弹出窗口显示一个提示,如“以 'yyyy-mm-dd' 格式输入生效日期”。弹出窗口的默认提示只是说“输入替换变量”

【问题讨论】:

  • 我怀疑这是否可能实现......

标签: sql oracle-sqldeveloper


【解决方案1】:

accept 和 prompt 关键字在 SQL Developer 3.1.07.42 中被识别。

这是使用此表单的演示:

accept Date_as_yyyy_mm_dd date format "YYYY-MM-DD" prompt "Enter the effective date in the format 'yyyy-mm-dd'" 

它使用您想要的文本创建提示窗口(提示值周围的双引号在 3.1 中不是必需的,但我认为它们更清楚;尽管在 3.1 中单引号不会保留,但是它们在 18.3) 中,并且还检查所提供值的格式;然后使用接受的值:

当作为脚本运行 (F5) 时,会出现带有指定文本的弹出窗口:

如果我输入的值与它重新提示的格式不匹配:

它有一个可接受的值,它在后续语句中使用该替换变量值:

只要您在脚本模式下运行 accept,您就可以将主查询作为语句 (control-enter) 运行,以在“查询结果”窗口的网格中获取结果。


正如 Jeff 所提到的,3.1 已经很老了——它似乎是在 2012 年 2 月发布的——所以你可能想要考虑获得一个更新的版本。

【讨论】:

  • 我在 2 个选项上停了下来,但是假设他们对脚本和网格输出没问题,你的第 3 个很好
  • 我主要是在解决它不起作用的断言;但是只要accept先在脚本模式下运行,你仍然可以使用'run statement'来获取网格输出,而且它似乎记住了最后接受的值。
  • 为了避免在 APEX 中构建简单的应用程序/报告而做了大量工作 :)
  • 感谢 Alex 指出接受 / 提示行在 3.1.07 中确实有效!我在我的解决方案中使用了这条线。
【解决方案2】:

选项 1:将其构建到您的 SUBSTITUTION 变量名称中

SELECT *
  FROM hr.employees
 WHERE hire_date > TO_DATE('&date_mm_dd_yyyy', 'MM-DD-YYYY');

日期格式有点像提示符 - 用户至少会知道您想要 2 位数的月份,然后是 2 位数的日期,然后是 4 位数的年份。

选项 2:使用带有绑定变量的报表。

对于报告,我们使用的是 BIND,而不是使用替换变量。您的查询基本保持不变,只是:X vs &X。好处是您的查询将在优化器中缓存一次而不是多次,每次查询一次......尽管数据库的最新副本足够聪明,可以自己解决这个问题。

您可以在报告中定义提示的标记方式。

以及报告背后的查询

SELECT *
  FROM hr.employees
 WHERE hire_date > to_date(:user_date, 'MM-DD-YYYY')

【讨论】:

  • PS 3.1 版非常非常旧。最新版本大约有 7 年的历史。当前版本是 18.3 - 尽管我的回答同样适用于两个版本。
  • 谢谢杰夫。我不喜欢第一个选项,因为它感觉有点笨拙,而第二个选项看起来不错,尽管 Bind 弹出窗口在 3.1.07 中没有设置工具提示值或提示值的选项。
猜你喜欢
  • 2021-08-24
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 2016-08-09
  • 1970-01-01
相关资源
最近更新 更多