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

时间:2013-12-10 12:00:57

标签: oracle plsql dynamic-sql

在我的实际工作中,我经常需要阅读一些表格并因此采取行动,有时手动更新这些数据。 所以我构建了一个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 || ';';

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

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

TIA。

F。

3 个答案:

答案 0 :(得分:1)

一个非常恐怖/ hackish的方法来做你想要的是将结果查询存储在一个临时表中,之后你可以做类似这里描述的过程:

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

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

答案 1 :(得分:1)

select a.rowid, a.* from table_name a; 

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

答案 2 :(得分:0)

  

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

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

作为一种解决方法,我建议您创建一个存储过程,它将一些参数作为“表名”,“where conditions”,然后创建可更新的数据库视图。执行完程序并准备视图后,您可以运行“select ... for update”并使用返回的数据进行处理。