Tôi không quen thuộc với lỗi định tuyến của Nhà phát triển SQL, vì vậy không chắc kết quả cuối cùng phải như thế nào. Nhưng bạn có thể sử dụng sys_context
cho điều này:
select sys_context('USERENV', 'MODULE') from dual;
Điều này mang lại:
SYS_CONTEXT('USERENV','MODULE')
--------------------------------------------------------------------------------
SQL*Plus
... hoặc:
SYS_CONTEXT('USERENV','MODULE')
-------------------------------
SQL Developer
Vì vậy, bạn có thể điều chỉnh những gì bạn có như:
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
Và sau đó kiểm tra với
show linesize
cung cấp cho linesize 500
trong SQL * Plus và linesize 5
trong SQL Developer.
Nếu bạn có thể chưa được kết nối trong SQL * Plus, chỉ cần xác định giá trị trước; bạn thậm chí không cần phải làm bất cứ điều gì đặc biệt để ẩn lỗi khỏi select
vượt ra ngoài set termout off
, mặc dù bạn có thể bao gồm whenever sqlerror
chỉ trong trường hợp login.sql
của bạn đang đặt nó để thoát - nhưng sau đó bạn có thể phải biết để đặt lại nó.
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
Cột column
giá trị sẽ ghi đè nó nếu lựa chọn thành công và không chạm vào nó nếu nó không thành công. Nếu tôi đặt nó vào một tệp có tên là client.sql
và chạy nó dưới dạng:
sqlplus -s /nolog @client
Tôi chỉ nhận được kết quả này:
linesize 500
Và điều tương tự cũng chạy trong SQL Developer, đưa ra linesize 5
một lần nữa.