@c
画面クリア
c.sqlファイルの中身
select ' ' as " "
from dict
where RowNum <= 20;
@e
作業フォルダをエクスプローラで表示
e.sqlファイルの中身
-- エクスプローラーを起動する
host start %WinDir%\explorer.exe C:\sqlplus
-- もしくは
-- ho start explorer C:\sqlplus
e.sqlファイルの中身(最大化して起動したい場合)
-- エクスプローラーを起動する
host start /max %WinDir%\explorer.exe C:\sqlplus
-- もしくは
-- ho start /max explorer C:\sqlplus
@t
トレースを設定
t.sqlファイルの中身
set autot trace
@p
tips集をEmEditrで開く
p.sqlファイルの中身
host "C:\Program Files\EmEditor\EmEditor.exe" "tips.sql"
tips.sqlファイルの中身
--Ignore_Row_ON_DupKey_Indexヒント
INSERT /*+ Ignore_Row_ON_DupKey_Index(テーブル名,索引名) */ into テーブル名
INSERT /*+ Ignore_Row_ON_DupKey_Index(テーブル名(列1,列2,列3)) */ into テーブル名
alter session set NLS_DATE_FORMAT = 'yyyy-mm-dd hh24:mi:ss';
alter session set nls_language = 'AMERICAN';
--バインド変数にバインドした値を見る
col SQL_text for a50
col Name for a15
col Value_String for a15
select substr(a.SQL_text,1,50) as SQL_text,
b.Name,b.Value_String,b.Position
from V$SQL a Join V$SQL_Bind_Capture b
on a.SQL_ID = b.SQL_ID
where InStr(a.SQL_text,':BindVar1') > 0
order by a.SQL_ID,b.Position;
UnPivot(列値の列名 for まとめた列名 in(元列1,元列2,元列3));
Pivot(集約関数 for 分岐列名 in(分岐列値1 as 集約後列名1,分岐列値2 as 集約後列名2));
Pivotでは、暗黙のgroup byが実行される
--接続情報を見る
select '★' || USERNAME
|| ',' || SCHEMANAME
|| ',' || OSUSER
|| ',' || MACHINE
|| ',' || TERMINAL
|| ',' || PROGRAM
|| ',' || to_char(LOGON_TIME,'YYYY/MM/DD HH24:MI') as Val
from V$SESSION
where SCHEMANAME != 'SYS'
--where SCHEMANAME not in ('SYS','SYSMAN','DBSNMP')
order by 1;
--テーブルdropのDDL
purge recyclebin;
select 'drop table ' || b.TABLE_NAME || ' purge;' as DDL
from user_objects a,user_tables b
where a.OBJECT_NAME = b.TABLE_NAME
and a.OBJECT_TYPE = 'TABLE'
order by a.created;
--オブジェクトブラウザのコマンドライン起動
"C:\Program Files\OB9\ob9.exe" "/u=AAAA/AAAA@AAAA"
--PL/SQL Developerのコマンドライン起動
start /max plsqldev.exe userid=aaaa/aaaa@aaaa
--フラッシュバッククエリ
EXECUTE DBMS_FLASHBACK.ENABLE_AT_SYSTEM_CHANGE_NUMBER
(timestamp_to_scn(to_timestamp('20061231','yyyymmdd')));
EXECUTE DBMS_FLASHBACK.DISABLE;
--PL/SQL でtruncate
execute immediate 'truncate table SCHEDULE';
-- オブジェクト全drop(userをcascadeオプションつきでdropしてcreate userもある)
select distinct OBJECT_NAME,OBJECT_TYPE from user_objects;
select 'drop ' || OBJECT_TYPE || ' ' || OBJECT_NAME || ';' from user_objects;
--現行セッションのNLSパラメータを見る
col PARAMETER for a30
col VALUE for a20
select * from nls_session_parameters;
--初期化パラメータを見る
col PARAMETER for a30
col VALUE for a20
select parameter,value from v$nls_parameters;
--ユーザに付与されたロールを見る
select * from session_roles;
--in述語は複数列であっても使用できる(共通集合が空集合でない場合に真となる)
select 1 from dual
where (2,3) in(select 1,3 from dual union all select 2,4 from dual);
--便利なシノニム
USER_CATALOG CAT
USER_CLUSTERS CLU
USER_INDEXES IND
USER_OBJECTS OBJ
USER_SEQUENCES SEQ
USER_SYNONYMS SYN
USER_TABLES TABS
USER_TAB_COLUMNS COLS
col,tab
--テーブルに付与されているトリガーを無効化
ALTER TABLE TableName DISABLE ALL TRIGGERS;
--CSV形式でspool
set linesize 1000
set pagesize 0
set trimspool on
set colsep ','
spool frush.txt
select * from TableName;
spool off
--列名の変更 9iR2から可
ALTER TABLE TableName RENAME COLUMN OldColumnName TO NewColumnName;
--リスナーの稼動確認(サーバー用)
コマンドプロンプトから
LSNRCTL services LISTENER
--undoの設定を見る
sho parameter undo
--SGAの設定を見る
sho SGA
--アカウントのロックとアンロック
alter user UserName account lock;
alter user UserName account unlock;
--アーカイブログモードかノーアーカイブログモードか見る
select log_mode from v$database;
--付与されたオブジェクト権限を見る
col owner form 'a20'
col table_name form 'a30'
col privilege form 'a10'
select owner,table_name,privilege from user_tab_privs
order by 1,2,3;
--pl/sqlの代入演算でcase式(oracle9i以降)
declare
a pls_Integer;
begin
a:= case when 3=1 then 1 else 2 end;
DBMS_Output.Put_Line('aの値は' || to_char(a));
end;
/
--キャラクタセットを見る
select PARAMETER,VALUE from nls_database_parameters
where parameter ='NLS_CHARACTERSET';
--マルチテーブルインサート
insert all
into TableName(ColA,ColB,ColC,ColD) values (1,2,3,4)
into TableName(ColA,ColB,ColC,ColD) values (1,2,3,4)
select 1 from dual;
insert all
when exists(select 1 from dual) then
into TableName(ColA) values('I')
select 1 from dual;
--所有オブジェクトの作成日を見る
select OBJECT_NAME, to_char(created, 'FMYYYY/MM/DD HH24:MI:SS') as 作成時間,
to_char(last_ddl_time, 'FMYYYY/MM/DD HH24:MI:SS') as 更新時間
from user_objects;
--oracleインスタンスが起動した時間
select to_char(STARTUP_TIME,'yyyy/mm/dd hh24:mi:ss') as 起動時間 from v$instance;
--UNDO領域の使用履歴
select begin_time,end_time,undoblks from v$undostat;
--テーブル定義を見る
SELECT DBMS_METADATA.GET_DDL('TABLE','TESTTABLE') FROM DUAL;
--DBMS_Output.Put_Lineで出力できるバイト数を設定
DBMS_OUTPUT.ENABLE(1000000);
--解析されたSQLを表示
select SQL_TEXT from v$sqltext
order by address, piece;
--日付の形式を変更
alter session set NLS_DATE_FORMAT= 'YYYYMMDD';
alter session set NLS_DATE_FORMAT= 'Y';
--SQL plusで時間計測
set timing on
set timi on
--データベースのバージョンを表示
select * from v$version;
select version from v$instance;
--オーナー別のトリガーリストの表示
SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE = 'TRIGGER'
order by 1,2;
--データベースリンク一覧を見る
select * from dba_db_links;
desc dba_db_links;
--テーブル一覧を表示
select table_name from user_tables where table_name like '%AAA%';
select table_name from user_tables order by 1;
--ビューの一覧を見る
select view_name from user_views ;
--ビューの一括コンパイル
select 'select * from ' || view_name || ' where rownum=1;' from user_views ;
--ストアドプロシージャの一覧を見る
select distinct name from user_source order by 1;
--全テーブルの列名一覧
select table_name,column_name,DATA_TYPE from user_tab_columns
order by table_name,column_id;
--indexを調べる
select index_owner,table_name,column_name from dba_ind_columns
where table_name='TABLENAME';
--nvl2関数
select a,nvl2(b,'nullでないです','nullです') from(
select 1 as a ,null as b from dual union
select 2 as a ,'2' as b from dual);
--errcodeからエラーメッセージを表示
declare
errmsg VARCHAR2(255);
BEGIN
errmsg:=SQLERRM (-1433);-- ora-01433のエラーメッセージといった場合
DBMS_OUTPUT.PUT_LINE(errmsg);
end;
/
--ストアドプロシージャのソースを見る
select text from user_source where name like '%ProcedureNAme%';
select text,name from user_source where text like '%substr%' or text like '%SUBSTR%';
--case式は最初に条件に一致した値を返す
select a,
CASE WHEN a = 1 THEN 10
when a = 3 then 30
when a = 3 then 50--(この行の50が返されることはない)
ELSE 100
END as b
from
(select 1 as a from dual union
select 2 from dual union
select 3 from dual union
select 4 from dual union
select 5 from dual);
@edesc
拡張descコマンド
edesc.sqlファイルの中身
col "列名" for a26
col "型" for a18
col "Null" for a4
col "Index(PK)" for a9
col "Index(NotPK)" for a13
set pages 200
set feed off
with tmp as(
select a.column_name,
case when sum(decode(a.index_name,b.index_name,1,0)) > 0
then '○' end as "Index(PK)",
case when sum(decode(a.index_name,b.index_name,0,1)) > 0
then '○' end as "Index(NotPK)"
from user_Ind_Columns a
Left Join user_constraints b
on a.index_name = b.index_name
and b.status = 'ENABLED'
and b.constraint_type = 'P'
where a.table_name = upper('&&1')
group by a.column_name)
select a.column_name as "列名",
case when a.data_type = 'NUMBER' and a.data_scale is null
then a.data_type
when a.data_type = 'NUMBER' and a.data_scale = 0
then a.data_type || '(' || to_char(a.data_precision) || ')'
when a.data_type = 'NUMBER'
then a.data_type || '(' || to_char(a.data_precision) || ',' || a.data_scale || ')'
when a.data_type in('CHAR','VARCHAR2')
then a.data_type || '(' || to_char(a.data_length) || ')'
else a.data_type end as "型",
decode(a.nullable,'N','No',' ') as "Null",
b."Index(PK)",b."Index(NotPK)"
from cols a Left Join tmp b
on a.column_name = b.column_name
where a.table_name = upper('&&1')
order by a.column_id;
set feed on
@edesc2
拡張descコマンド2 (列コメント表示)
edesc2.sqlファイルの中身
col "列名" for a26
col "型" for a18
col COMMENTS for a30
set pages 1000
set feed off
select a.column_name as "列名",
(select c.COMMENTS
from USER_COL_COMMENTS c
where c.TABLE_NAME = a.TABLE_NAME
and c.COLUMN_NAME = a.COLUMN_NAME) as COMMENTS,
case when a.data_type = 'NUMBER' and a.data_scale is null
then a.data_type
when a.data_type = 'NUMBER' and a.data_scale = 0
then a.data_type || '(' || to_char(a.data_precision) || ')'
when a.data_type = 'NUMBER'
then a.data_type || '(' || to_char(a.data_precision) || ',' || a.data_scale || ')'
when a.data_type in('CHAR','VARCHAR2')
then a.data_type || '(' || to_char(a.data_length) || ')'
else a.data_type end as "型"
from cols a
where a.table_name = upper('&&1')
order by a.column_id;
set feed on
他のSQLスクリプト
Oracle達人技ベストのSQLスクリプト
Oracleコマンド目的別リファレンス
Oracleパフォーマンス障害の克服