Contents
SQL/DDL
SQL
JOIN
INNER JOIN
select * from hoge h inner join fuga f on (h.id = f.id)
以下と等価。
select * from hoge h, fuga f where h.id = f.id
OUTER JOIN
select * from hoge h left outer join fuga f on (h.id = f.id)
以下と等価。
select * from fuga f right outer join hoge h on (f.id = h.id)
select * from hoge h, fuga f where h.id = f.id(+)
[left|right]は省略可能。(省略時はleft)
設定されている制約を参照する。
select a.table_name, b.column_name, a.constraint_name, a.constraint_type from user_constraints a, user_cons_columns b where a.table_name = b.table_name (+) and a.constraint_name = b.constraint_name (+)
SEQUENCEを参照する。
SELECT * FROM USER_SEQUENCES
PL/SQL パッケージの一覧を参照する。
select object_name from user_objects where object_type = 'PACKAGE'
object_typeには INDEX, LOB, PACKAGE, PACKAGE BODY, PROCEDURE, SEQUENCE, TABLE, SYNONYM がある。
PL/SQLパッケージソースの復元
select text from user_source where name = 必要なパッケージ名 and type = 'PACKAGE BODY' order by line
- spoolに出力するがよい。
- typeには INDEX, LOB, PACKAGE, PACKAGE BODY, PROCEDURE, SEQUENCE, TABLEがある。
View のソースを復元
select text from user_views where view_name='ビュー名';
- set long 4000; などして、longの表示可能サイズを拡大する。
INSERT...SELECT文の構文
insert into table_name1 (col_name1, col_name2...) select col_mame1, col_name2... from table_name2 where id = 1;
- values句は不要。
- カラムの型は同じでないといけない。
トランザクション管理
セーブポイント
savepoint セーブポイント名
- commitはトランザクション全てコミットされる。
- rollbackはトランザクション全て破棄される。
- 同一トランザクション内で同じ名前のセーブポイントを指定した場合、上書きされる。
rollback to savepoint セーブポイント名;
- セーブポイント名を設定した以後のトランザクションが破棄される。
- セーブポイント以前のトランザクションは生き。
- セーブポイント名が未設定のセーブポイントの場合、エラーとなる。
月末日を求める。
TO_DATE(TO_CHAR(ADD_MONTH(TO_DATE('適当な日付'), 1), 'YYYY/MM') || '/01') -1
- 適当な日付 に1月足して、月初日(01)を算出し、1日引く。
欠番探索
select NEW_CODE = min(t1.CODE + 1) from ( select CODE from [TABLE] union all select CODE from [RESERVE] (READUNCOMMITTED) ) t1 left outer join ( select CODE from [TABLE] union all select CODE from [RESERVE] (READUNCOMMITTED) ) t2 on (t1.CODE + 1) = t2.CODE where t2.CODE is null
その他
shellからSQLを実行する。
SQLファイルを実行
sqlplus -S uid/pass@sid @hoge.sql
SQL文を実行
sqlplus -S uid/pass@sid <<END select sysdate from dual; exit sql.sqlcode END