plsql - 我可以从存储过程中调用 SQL Developer PL/SQL 格式化吗
问题描述
在 Oracle SQL Developer 中,当我右键单击类型为 Function、Procedure 或 Package 的对象时,我在上下文菜单中有一个“Run”或“Profile”选项。对话框显示“目标”、“参数”和“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# 等的工作知识很少,所以如果不能通过存储过程轻松调用它,则无需详细回复. 提前致谢。
解决方案
我们查询数据字典以获取绘制对话框所需的数据,如下所示:
你可以看到我们在后台运行的 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 代码,您可以通过任何方式重现。
推荐阅读
- c# - 统一碰撞后缩放布娃娃角色
- regex - 如何从 ansible 调试的字典键值中删除不需要的字符串
- html - 制作位于可滚动正文 div 下方的固定页脚
- java - 如何绕过使用 OpenID 的过时开源项目的登录页面?
- sql - ODBC 日期时间格式无效。(#0) 升级到 Office 2016 后出现错误
- timeout - 使用 reactphp 的服务器端超时
- python - 如何使用具有指定均值和标准差的正态分布生成 100000 个随机数?
- css - 你如何改变 R Shiny 中 div 的样式?
- javascript - useEffect 问题和未安装的组件问题
- python - 如何更改功能或避免错误