programing

마음에 드는 SQL*Plus 힌트 및 요령

closeapi 2023. 4. 6. 21:41
반응형

마음에 드는 SQL*Plus 힌트 및 요령

SQLPLUS가 작업을 처리하는 Oracle DB에 빠르게 연결하기만 하면 되는 경우가 많습니다.

Oracle을 사용하기 시작하면 가장 먼저 Toad 또는 SQLDeveloper를 설치하라는 지시를 받게 됩니다.그래도 간단한 쿼리를 수행할 경우 이러한 도구가 로드될 때까지 기다리지 않을 수 있습니다.

셸을 시작할 때 실행하는 스크립트가 있기 때문에 더 나은 경험을 얻을 수 있습니다.

SET pagesize 2000
SET LONG 10000
SET linesize 1000
COLUMN last_name format a20
COLUMN total format 999,999,999
SET feedback ON
alter session set nls_date_format = 'yyyy-mm-dd hh:mi:ssPM';

이 예에서는 "COLUMN" 설정을 잘랐지만 기본적으로는 데이터가 화면에 잘 맞도록 도와줍니다.

날짜 형식을 설정하면 날짜를 쉽게 처리할 수 있습니다.

윈도우에서 명령 창이 열리면 윈도우 레이아웃 속성을 설정하여 스크롤하거나 창을 넓히거나 향후 윈도우 설정을 저장합니다.

SQL*Plus를 매일 사용하는 사람이 있습니까?팁이 있나요?

rlwrap을 사용하여 sqlplus에 readline 지원을 추가할 수 있습니다.다음과 같이 sqlplus를 실행합니다.

$ rlwrap -c sqlplus username@database

이제 위/아래로 명령 내역을 스크롤합니다.이력 등을 거꾸로 검색하려면 ctrl+r을 사용합니다.따라서 sqlplus는 견딜 수 있습니다.

또, 로그인에 이 정보를 추가합니다.sql을 사용하여 단말기의 폭에 관계없이 회선 크기를 설정합니다.

HOST echo "set linesize" $(stty -a|head -n1|cut -f7 -d' '|cut -f1 -d';') > .tmp.sql
@.tmp.sql
HOST rm -f .tmp.sql

이 두 가지 힌트는 모두 unix에서만 작동합니다.

예, Toad 또는 SQL Developer보다 SQL Plus를 매일 사용합니다(SQL Developer를 사용하여 데이터베이스를 찾아보기도 함).

로그인에는 다음과 같은 내용이 있습니다.sql 스크립트(SQL Plus가 자동으로 실행):

1) 기본 에디터(Notepad)를 다음 중 하나로 바꿉니다.

define _editor = "C:\Program Files\TextPad 5\TextPad.exe"

2) SQL 프롬프트의 show database name을 작성하여 위치를 확인합니다(Tom Kyte 덕분에).

COLUMN global_name new_value gname
SET TERMOUT OFF
SELECT LOWER(USER) || '@' || global_name||CHR(10)||'SQL> ' AS global_name
FROM   global_name;
SET SQLPROMPT '&gname'
SET TERMOUT ON

...또한 당신과 비슷한 설정도 있습니다.

Tom Kyte의 print_table 프로시저도 매우 유용하다고 생각합니다.

로그인에 이러한 설정을 추가할 수 있습니다.SQL*Plus를 시작할 때마다 자동으로 실행되는 sql 스크립트.자세한 것은 이쪽.

이 스크립트는 10g 이후 처음 SQL*Plus를 시작할 때에만 실행되는 것이 아니라 연결할 때마다 실행됩니다.

SQL> conn apc
Enter password:
Connected.
Running login script

Session altered.

SQL> conn scott
Enter password:
Connected.
Running login script

Session altered.

SQL>

SQL*Plus를 Oracle에서만 사용하고 있습니다.다른 답변은 이미 매우 편리한 로그인을 제공합니다.sql 콘텐츠.

은 나의 ★★★★★★★★★★★★★★★★★★★★입니다.login.sql톰 키티와 윌리엄 로버트슨의 제안을 그대로 베꼈습니다.어쩌면 여러분도 사용하고 싶은 것을 찾을 수 있을지도 모릅니다.

set termout off
set serveroutput on size unlimited
set pagesize 50000
set linesize 135
set long 50000
set trimspool on
set tab off
def _editor = "C:\Progra~1\Notepad++\Notepad++.exe"

define gname=idle
column global_name new_value gname
select lower(user) || '@' ||
       substr(global_name,1,decode(dot,0,length(global_name),dot-1)) global_name
from (select global_name,instr(global_name,'.') dot from global_name);
set sqlprompt '&gname> '

alter session set nls_date_format = 'dd-mm-yyyy hh24:mi:ss'
/
var sid number
var serial# number
var tracefile VARCHAR2(200)

DECLARE
    v_audsid v$session.audsid%TYPE;
BEGIN
    SELECT sid, serial#, audsid
    INTO   :sid, :serial#, v_audsid
    FROM   v$session
    WHERE  audsid = SYS_CONTEXT('USERENV','SESSIONID');

    SELECT par.value ||
           CASE WHEN par.value LIKE '%/%' THEN '/' ELSE '\' END ||
           LOWER(th.instance) ||
           '_ora_' || LTRIM(TO_CHAR(pro.spid,'fm99999')) || '.trc' AS filename
    INTO   :tracefile
    FROM   v$process   pro
         , v$session   se
         , v$parameter par
         , v$thread    th
    WHERE  se.audsid = v_audsid
    AND    pro.addr = se.paddr
    AND    par.NAME = 'user_dump_dest';
END;
/

BEGIN
    IF :sid IS NULL THEN
        SELECT sid
        INTO   :sid
        FROM   v$mystat
        WHERE  rownum = 1;
    END IF;
END;
/

set termout on
set feedback off
exec DBMS_OUTPUT.PUT_LINE('Sessie: ' || :sid || CASE WHEN :serial# IS NULL THEN ' (no access to V$ tables)' ELSE ',' || :serial# END)
exec IF :tracefile IS NOT NULL THEN DBMS_OUTPUT.PUT_LINE('Eventueel trace-bestand: ' || :tracefile); END IF
prompt
set feedback on

오프라인에서 sqlplus를 사용하는 것을 좋아합니다.

sqlplus -S user/password @query.sql> file.txt

여기서 query.sql은

set feedback off verify off heading off pagesize 0
...here goes a query...
quit;
/

따라서 Windows 또는 Unix의 bat/script 파일에 있는 데이터베이스에서 정보를 얻을 수 있습니다.

SQL*Plus 컬럼 변수를 디렉티브 내에서 사용하면 편리합니다.예를 들어, 세션 중에 이미 존재하는 다른 로그를 덮어쓰지 않기 위해 새 파일 이름으로 스풀하고 싶은 경우가 많습니다(@file을 통해 처음 3개의 문).

SQL> column spr new_value spoolref
SQL> select user||'_'||abs(dbms_random.random) spr from dual;
SQL> spool &spoolref
         ... do work here ...
SQL> spool off

그러면 시간별로 정렬하여 새 로그를 찾을 수 있습니다. 원하는 경우 랜덤 번호 이외의 전략을 언제든지 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1439203/favorite-sqlplus-tips-and-tricks

반응형