「OracleDB」カテゴリーアーカイブ

Oracle DatabaseのSQL

ゴミ箱を空にする

PURGE RECYCLEBIN;

テーブルの一覧を参照する

SELECT * FROM CAT;

テーブルのレイアウト参照

DESC T_HOGE;

日付の計算

 SELECT
   SYSDATE,
   ADD_MONTHS(SYSDATE,(5*12)),    -- 年を足す(5年後)
   ADD_MONTHS(SYSDATE,5),         -- 月を足す(5月後)
   SYSDATE + 5,                   -- 日を足す(5日後)←これが基準みたい
   SYSDATE + 5 * (1/24),          -- 時間を足す(5時間後)
   SYSDATE + 5 * (1/(24*60)),     -- 分を足す(5分後)
   SYSDATE + 5 * (1/(24*60*60))   -- 秒を足す(5秒後)
 FROM DUAL

日付の書式

SELECT
    sysdate,
    TO_CHAR(sysdate,'YYYY/MM/DD(DY) AM HH12:MI:SS'),
    TO_CHAR(sysdate,'YY/MM/DD(DAY) HH24:MI:SS'),
    TO_CHAR(sysdate,'YYYY/MONTH/DD(DAY) HH24:MI:SS')
FROM DUAL

SELECT FOR UPDATE

SELECT FOR UPDATEを行うときは
テーブル全体のレコードが対象にならないようにする。
→ユニークのレコードが対象になるように
そうしないとREDOログが膨大なサイズになって大変なことになる。

SELECT * FROM T_HOGE FOR UPDATE --これではダメ
SELECT * FROM T_HOGE WHERE COL_PIYO = "pipi" FOR UPDATE --これならOK

PL/SQL

基本

  1. DECLARE、EXCEPTION、BEGIN~END(必須)から構成される
  2. 戻り値のあるファンクション、戻り値のないプロシージャを作成できる
  3. JavaプロシージャをPL/SQLから呼び出せる

ループ

LOOP
処理;
[EXIT WHEN 条件;]
END LOOP;

※「EXIT WHEN 条件;」がなければ無限ループ。

WHILE 条件 LOOP
処理;
[EXIT WHEN 条件;]
END LOOP;

※条件が真であればループ。

FOR i IN 1..10 LOOP
処理;
[EXIT WHEN 条件;]
END LOOP;

※1から10までを増算しながらループ。
※iはカウンタ

FOR i IN REVERSE 1..10 LOOP
処理;
[EXIT WHEN 条件;]
END LOOP;

※10から1までを減算しながらループ。
※iはカウンタ

※「EXIT WHEN 条件;」は、条件がなければ
「EXIT;」とも書ける