トップページに戻る    次のOracleツールへ    前のOracleツールへ

SQLPlusとSQLPlusWの作業フォルダに拡張子がSQLのファイルがあると
@SQLのファイル名(ファイルの拡張子がSQLなら.SQLは省略可)で、
SQLファイルに記述された内容を実行できます。

SQLスクリプトを自作したり、インターネットからダウンロードしたSQLスクリプトを
作業フォルダに、置いておくといいでしょう。


私が使用してるSQLスクリプト

@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パフォーマンス障害の克服