oracle - 我的 sql 脚本如何确定它是在 sqldeveloper 还是 sqlplus 中运行?

标签 oracle oracle-sqldeveloper

我正在尝试通过编写我的脚本来检测它是 SQL*Plus 还是 SQLDeveloper 来解决 SQLDeveloper linesize 错误。像这样的东西:

COLUMN SET_THE_LINE new_value TARGETLINESIZE noprint
SELECT DECODE ('&&_SQLPLUS_RELEASE.','',5,500) as SET_THE_LINE from dual;
SET LINESIZE &&TARGETLINESIZE

我知道 SQL*Plus 总是设置 _SQLPLUS_RELEASE 的值,可以理解,SQLDeveloper 不会。

不幸的是,SQLDeveloper 总是提示输入 _SQLPLUS_RELEASE 的值。

有什么建议吗?

最佳答案

我不熟悉 SQL Developer 的 linesize 错误,所以不确定最终结果应该是什么。但是你可以使用 sys_context为此:

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

给出:

SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus

...或者:

SYS_CONTEXT('USERENV','MODULE')                                           
-------------------------------
SQL Developer 

因此您可以将现有的调整为:

column set_the_line new_value targetlinesize noprint
set termout off
select case sys_context('USERENV', 'MODULE')
    when 'SQL Developer' then 5 else 500 end as set_the_line from dual;
set termout on
set linesize &&targetlinesize

然后测试

show linesize

它在 SQL*Plus 中给出 linesize 500,在 SQL Developer 中给出 linesize 5


如果您在 SQL*Plus 中可能尚未连接,请先定义值;除了 set termout off 之外,你甚至不需要做任何特殊的事情来隐藏 select 的错误,尽管你可以包含一个 whenever sqlerror 以防万一你的 login.sql 将它设置为退出 - 但你可能必须知道之后要重置它。

define targetlinesize=500
whenever sqlerror continue
set termout off
column set_the_line new_value targetlinesize noprint
select case sys_context('USERENV', 'MODULE')
    when 'SQL Developer' then 5 else 500 end as set_the_line from dual;
set termout on
set linesize &&targetlinesize
show linesize

如果选择成功, 值将覆盖它,如果选择失败则不会触及它。如果我把它放在一个名为 client.sql 的文件中并运行它:

sqlplus -s /nolog @client

我只得到这个输出:

linesize 500

同样的事情在 SQL Developer 中运行,再次给出 linesize 5

关于oracle - 我的 sql 脚本如何确定它是在 sqldeveloper 还是 sqlplus 中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16596918/

相关文章:

oracle - 如何在 oracle 11g 中从 SELECT 语句创建表

oracle-sqldeveloper - SQL dev,查找变量之类的值

oracle - 如何增加 Oracle SQL Developer 18.1 的 GUI/字体/所有内容的大小

oracle - Sql Developer 2.* 有方便的数据建模器 - Sql Developer 3.* 中有类似的东西吗

java - 使用大型 'IN' 子句优化 Oracle SQL

oracle - 获取模式中所有表的计数

java - Oracle AQ 按优先级相反的顺序传送 JMS 消息

sql - 如何使用过程和用户​​输入在 PL/SQL 中搜索日期

python - 如何使用 python 和 cx_Oracle 更新 oracle 表中的列并在每次记录更新后提交

sql - 使用 Oracle Sql developer(远程)连接到 oracle 12c