蜜蜂号覚書 SQL
※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

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

なんかあればどうぞ

名前:
コメント: