Corredor

ウェブ、プログラミングの勉強メモ。

SQL

Oracle DB で SQL ファイルをスクリプトとして実行した時に Sleep・Wait 処理を挟む

Oracle DB の操作中、Sleep・Wait 的な処理を挟めることが分かったのでやってみた。 先に、対象の環境で DBMS_LOCK 権限を付与しておく。 SYS/SYSDBA@my_oracle AS SYSDBA GRANT EXECUTE ON DBMS_LOCK TO my_db; 次に、SQL スクリプト中で DBMS_LOCK.SLEEP()…

Oracle DB の NVL() と NVL2() の違い

Oracle には NVL() と NVL2() という2つの関数があったので、違いを見てみた。 SELECT NVL(NULL, 'NULL!'), NVL2(NULL, 'NOT NULL!', 'NULL!') FROM DUAL; NVL() は第1引数が NULL の時に第2引数を返すモノ。第1引数が NULL でなければ、第1引数がそのまま返…

Oracle DB で数値のみのフィールドかどうかを判定する

Oracle DB で、対象のフィールドの内容が数値のみかどうかを判定する。 例えば、users.user_code には 08114 といった数値のみのユーザコード z916294 といった数値以外の文字列を含むユーザコード が混在していて、これらを区別したいとする。 以下のように…

Oracle DB で MINUS ALL・INTERSECT ALL を再現する

Oracle DB には MINUS ALL や INERSECT ALL がないので、ちょっと手を加えて再現する。 MINUS ALL の再現 INTERSECT ALL の再現 MINUS ALL の再現 通常の MINUS は1つ目の SQL から2つ目の SQL にあるものを除外し、重複行は1行にまとめて返す。UNION と違い…

Oracle DB で色々な一覧取得

Oracle DB でテーブル一覧やデータディクショナリビューの一覧を取得する。 テーブル一覧を取得する データディクショナリビューの一覧を取得する ついでに : 行番号を一緒に出力するには テーブル一覧を取得する SELECT * FROM USER_TABLES ORDER BY TABLE_…

Oracle DB のシーケンスを作成・参照・操作する

Oracle DB のシーケンスを参照したり、「1 ずつ増える」挙動を「100 ずつ増える」挙動に変更してみたりする。 -- シーケンス一覧を取得する SELECT * FROM USER_SEQUENCES; -- 次のシーケンス値を取得 (実行するたびにインクリメントされる) SELECT my_seque…

Oracle DB で改行を含む文字列を Insert・Update する

以前、PostgreSQL の文脈で改行を含む Insert・Update を紹介したが、Oracle DB の場合はちょっと違いがあったので紹介。 neos21.hatenablog.com Oracle の場合、CHR(13) で CR (キャリッジリターン) を入れてやらないといけなかった。CHR(10) での LF (ライ…

Oracle DB でカラムの順序を変更するには

Oracle DB でカラムの順序を入れ替えたりするには、ALTER TABLE では操作できないので、以下のように操作する。 -- 元となる table_1 からカラム順を変更して SELECT し、table_2 を作る CREATE TABLE table_2 AS SELECT column_c, column_b, column_a FROM …

Oracle DB でシステム日付を参照したり、和暦変換したり、日付を加減算したり

Oracle DB の日付に関するアレコレ。11g ぐらいの頃の知識なので少し古くなっているかも?最近のことはよく調べていない。 システム日付を取得する SELECT TO_CHAR(SYSDATE , 'YYYY-MM-DD HH24:MI:SS' ), TO_CHAR(SYSTIMESTAMP , 'YYYY-MM-DD HH24:MI:SS.FF3…

SQL*Plus で2500文字以上のデータを INSERT したりするには

SQL*Plus は1行あたりの文字数が2500文字を超えると、正しく扱えず以下のようなエラーが出る。 SP2-0027: 入力が長すぎます (> 2499文字)。この行は無視されました。 コレを解消するには、|| で行の文字データなどを分割して記述し、1行あたりの桁数が2500文…

Oracle DB でテーブルとリサイクルビンの復元・削除

絵で見てわかるOracleの仕組み [ 小田圭二 ]ジャンル: 本・雑誌・コミック > PC・システム開発 > その他ショップ: 楽天ブックス価格: 2,376円 Oracle DB でテーブルを消すと、リサイクルビンというゴミ箱的な領域にゴミが残る。このリサイクルビンを含めたテ…

Oracle DB でよく使う一覧表示系のユーザディクショナリ

Oracleの現場を効率化する100の技 [ 鈴木健吾 ]ジャンル: 本・雑誌・コミック > PC・システム開発 > その他ショップ: 楽天ブックス価格: 3,218円 Oracle DB を保守管理するときによく使うと思われる、一覧表示して確認できる系のユーザディクショナリを紹介…

PostgreSQL で改行を含む文字列で Insert・Update・カラムコメントを付ける

PostgreSQL (ポストグレ・エスキューエル) を使い始めた。Oracle より柔軟性がある感じがする。 今回は改行を含む文字列で Insert・Update したり、テーブル・カラムにコメントを付けたりする方法を紹介。 方法1 : chr() を使う chr(13) で CR、chr(10) で L…

Oracle で複数レコードを一気に INSERT する記法を毎回忘れる

INSERT ALL の書き方を毎回忘れるのでメモ。 こう書く。 INSERT ALL INTO tbl_hoge (id, name, age) VALUES (1, 'Michael', 55) INTO tbl_hoge (id, name, age) VALUES (2, 'Christopher', 77) INTO tbl_hoge (id, name, age) VALUES (3, 'Lea', 55) INTO tb…

Oracle DB の全テーブルのレコード数を求める SQL

Oracle には「データディクショナリ」と呼ばれる参照表があり、ユーザやテーブルに関する色々を SQL で検索できる。 例えば SELECT TABLE_NAME FROM USER_TABLES; とすると、Oracle DB にログインしているユーザスキーマの中にある全テーブル名の一覧を SQL …

SQL のコーディングスタイル

SQL のコーディングスタイルってあんまり語られなくて、よくある自動整形ツールが倣う有名なスタイルはあったりするんだけど、有名といった割に知名度が低かったり、そんで結局オレオレな書き方になってることが多い。 自分もご多分に漏れずオレオレな書き方…