我可以从存储过程中调用SQL Developer PL / SQL格式吗

时间:2019-05-23 18:26:07

标签: plsql oracle-sqldeveloper code-formatting

在Oracle SQL Developer中,当我右键单击类型为Function,Procedure或Package的对象时,我在上下文菜单中可以选择“运行”或“配置文件”。对话框将弹出“目标”,“参数”和“ PL / SQL块”的字段。 “ PL / SQL块”显示一个示例代码片段,以运行作为匿名块编写的程序,并对其进行了格式化。

我的问题:它是如何构建的,是否可以在其周围放置一个过程以便可以从数据库中调用它?

如果可能,我需要参数列表(对象名称,所有者,??)来调用可执行文件/ jave / etc。 然后,我将创建如下内容:

create procedure pretty_print_sample_code(...some parameter list needed by developer method..) is
begin
    ..do some checks
    ..invoke the developer code
    ..output result as clob or line by line the result
end pretty_print_sample_code;
/

然后从sqlplus或开发人员那里,我可以运行该程序以获取结果。这对于新功能文档(包括技术规范中的代码段)很有用,或者只是具有一种在数据库中获取“模板”的方式,因此我可以轻松地更改参数值并执行。

我主要是一名Oracle开发人员(自学6年),对Java或C#或类似语言的了解最少,因此,如果不能通过存储过程轻松地调用它,那么就不需要响应了细节。 预先感谢。

1 个答案:

答案 0 :(得分:1)

我们查询数据字典以获取我们需要绘制如下对话框的数据:

enter image description here

您可以看到我们在后台运行的SQL来获取这些数据,然后我们只是动态生成您在匿名块中看到的代码。

例如,我们运行此命令以获取您的打包过程的参数列表:

SELECT position,
       argument_name,
       data_level,
       data_type,
       in_out,
       CASE
              WHEN char_used = 'C' THEN
                     char_length
              ELSE
                     data_length
       END data_length,
       data_precision,
       data_scale,
       type_owner,
       type_name,
       type_subname,
       pls_type
  FROM sys.dba_arguments
 WHERE owner = :owner
   AND object_id          = :id
   AND object_name        = :name
   AND nvl(overload, '0') = :overload
 ORDER BY sequence

当您单击“确定”时,我们通过脚本引擎运行该脚本引擎,该脚本引擎可以处理SQLPlus可以执行的几乎所有工作……并且包括捕获SERVEROUTPUT(如DBMS_OUTPUT缓冲区内容)。

您可以在日志面板中快速看到我们通过与Oracle的JDBC连接所运行的SQL ...其余就是我们的Java代码,供您通过任何方式重现。