构建一些动态查询选择并立即在 Oracle PL/SQL 中显示其输出

Posted

技术标签:

【中文标题】构建一些动态查询选择并立即在 Oracle PL/SQL 中显示其输出【英文标题】:Building some dynamic query select and display its output immediately in Oracle PL/SQL 【发布时间】:2013-12-10 12:00:56 【问题描述】:

在我的实际工作中,我经常需要阅读一些表格并采取相应的行动,有时需要手动更新这些数据。 所以我构建了一个 PL/SQL 块来创建我的 SELECT 语句(是的,带有“FOR UPDATE”子句,刚刚注释)。 例如,这只是我构建的查询之一

phtr_QUERY := 'SELECT *
 FROM   ' || tabriabi_impianto || '.pdfhtr t 
 WHERE t.k_abi=''' || tabriabi_abi || ''' ';

if length(myNag) > 0 then
 phtr_QUERY := phtr_QUERY || 'and t.ndg like ''%' || myNag || '%'' ';
end if;

if length(myPrat) > 0 then
  phtr_QUERY := phtr_QUERY || ' and t.pratica like ''%' || myPrat || '%'' ';
end if;
phtr_QUERY := phtr_QUERY || crlf || ' order by 2 ';
phtr_QUERY := phtr_QUERY || crlf || '--for update';
phtr_QUERY := phtr_QUERY || crlf || ';';

然后我从输出窗口复制这些语句(通过 dbms_output.put_line 获得)并将其粘贴到新的 SQL 窗口并执行它,在多个选项卡中获得结果。

我想知道是否有更好的方法,我可以使用一些命令来直接获得(可编辑的)结果,而无需剪切和粘贴......

TIA。

F.

【问题讨论】:

所选列的数量和类型是否始终相同? 嗨,温弗里德。查询 (5) 返回不同的元组。 【参考方案1】:

一种非常可怕/骇人听闻的方法是将结果查询存储在临时表中,然后您可以执行此处描述的过程:

How can I use an SQL statement stored in a table as part of another statement?

请注意:这可能是个坏主意。

【讨论】:

还不错...考虑到我只是将它用于我的目的,它不是最终用户解决方案。非常感谢,但是漏掉了一点:编辑功能的可能性。 如果您不想对从 SELECT 语句获得的结果做任何花哨的事情(例如,仅显示它们)。您可以使用SELECT INTO* 下的所有字段选择为单独的变量,然后使用PRINT 函数以您想要的任何顺序打印它们。但是请注意,我听说PRINT 在 TOAD 上运行不佳,如果您碰巧使用它的话。 Reference for PRINT function 不,没什么特别的......但有时我需要编辑一些字段。是不是很花哨? :)【参考方案2】:
select a.rowid, a.* from table_name a; 

将在许多工具中以编辑模式打开。

【讨论】:

【参考方案3】:

我想知道是否有更好的方法,我可以使用一些命令来直接获得(可编辑的)结果,而无需剪切和粘贴

您应该了解编辑功能是您正在使用的数据库工具的功能。当您在结果网格中插入、更新或删除某些记录时,此工具会将您的操作转换为相应的 SQL 语句并即时执行。

作为一种解决方法,我建议您创建一个存储过程,该过程将一些参数作为“表名”、“位置条件”,然后创建可更新的数据库视图。执行过程并准备好视图后,您可以运行“select ... for update”并像现在一样处理返回的数据。

【讨论】:

谢谢雅罗斯拉夫。显然我同意你的观点,但它非常令人沮丧,如果像“立即执行”这样的东西就能完成我的目标,那就太简单了。

以上是关于构建一些动态查询选择并立即在 Oracle PL/SQL 中显示其输出的主要内容,如果未能解决你的问题,请参考以下文章

pl sql & java - 创建动态查询

如何在 oracle pl/sql 查询中动态获取字段名称?

使用嵌套表在 Oracle PL/SQL 中构建动态 SQL

Oracle Apex 日期选择器行为异常

查询未拉入选择框值,oracle

如何使用 Oracle (PL/SQL) 动态 sql 将数据查询到 %rowtype 变量中