Skip to main content

SQLPlus

常用技巧
show user
conn system/pass       -- 登入資料庫
r                      -- 執行前一個SQL
/                      -- 執行前一個SQL
@?/rdbms/xxx.sql       -- @ 執行外部SQL檔, ? Oracle_HOME 
!ls                    -- ! 執行Linux 系統指令
set timing on          -- 顯示SQL執行耗費時間 
Rem This is a comment  -- 註解, 不要加分號
l                      -- 顯示前一個 SQL 內容, 直接輸入分號也可以
3                      -- 移動至 SQL 內容裡的第3行
3 where status='INVALID'      -- 將第3行改成 where status='INVALID'  
c/INVALID/VALID/              -- 將目前行內容的 INVALID 取代成 VALID, c = change 
輸出格式化
set pagesize 60  -- 輸出每頁行數,預設為24,為了避免分頁,可設定為0, 若設0, 不會顯示欄位名稱。
set linesize 350  -- 每行長度(太小會斷行,太大效能差)
set wrap off   -- 不斷行
set space 1  -- 欄位間空幾個space
set echo on  -- Show SQL語法在畫面上
col tablespace_mb heading 'TABLESPACE|TOTAL MB' -- 設定長標題以斷行顯示 
col os_user_name head "OS|Username" form a10 truncate
col process head "Client|Process|ID" form 99999999

--ttitle 'SQL By CPU Usage'
prompt
prompt +----------------------------------------------------+
prompt | SQL BY CPU USAGE
prompt +----------------------------------------------------+
set termout off      --顯示腳本中的命令的執行結果
set trimout on       --刪除標準輸出每行的行尾空格
set trimspool on     --刪除行尾空白

Select 欄位A||'┴'|| replace(欄位B ,CHR(10),CHR(13))||'┴' from 資料庫.資料表 where 欄位B is not null order by 欄位A;
因為欄位B 裡有斷行符號^p,要將他轉換成分行符號^l^p, ^l為word 的代碼,ASCII碼分別為 CHR(10),CHR(13)欄位A與欄位B間,用┴作區隔。
set feedback off     -- 不顯示結果筆數的資訊
set heading off      -- 不顯示欄位的標題欄

去除 TAB 與格式化輸出

set colsep "|"
set tab off
定義變數
var tbs_source varchar2(50);  
var tbs_dest varchar2(50);  
var schema_user varchar2(50); 

exec :tbs_source  := 'SOURCE_TBS';  
exec :schema_user     := 'SOURCE_USER';   
exec :tbs_dest := 'DEST_TBS';  

select 'Transporting tablespace ' || :tbs_source || ' or user ' || :schema_user || ' to tablespace ' || :tbs_dest from dual;
特殊字元
-- 換行
chr(10)
註解文字
-- 單行說明

/* 這是多行
   說明 */ 
顯示系統時間
select to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss') Begin_Datetime from dual;

!sleep 5

select to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss') End_Datetime from dual;