0

是否有任何 SQL 命令可以在 sqlplus 提示符下打印当前正在执行的 .SQL 文件的名称?

有一种 Unix 方法可以做到这一点。但我正在寻找显示当前文件名的有效 SQL 命令。

4

1 回答 1

3

没有合适的命令来执行此操作,但sqlcl的 ER 非常好(而且很明显)

今天有几种方法可以实现这一目标。第一种是将代码添加到要使用的每个脚本中dbms_application_info,并将模块/操作设置为进程和脚本的名称。这将适用于任何工具,因为它将信息放入数据库以便稍后通过 sql/plsql 检索。它也可能很方便,因为它被捕获到诸如 ASH/AWR/v$session 之类的东西中。

还有另一种特定于 sqlcl 的方式,它是script访问正在运行的上下文并打印它的命令。这是两个选项的示例>>

SQL> !cat k.sql
--- generic 
exec DBMS_APPLICATION_INFO.SET_MODULE('InstallScript','k.sql');


select   sys_context('USERENV', 'ACTION'), sys_context('USERENV', 'MODULE') from dual;

-- sqlcl specific.....
script
ctx.write(ctx.getLastUrl() + "\n");
/

SQL> @k.sql

PL/SQL procedure successfully completed.

   SYS_CONTEXT('USERENV','ACTION')    SYS_CONTEXT('USERENV','MODULE')
__________________________________ __________________________________
k.sql                              InstallScript


file:/Users/klrice/k.sql
SQL>
于 2019-11-01T14:13:54.563 回答