様々な基本になるサンプルを記録しています。

不定期更新です。

記事のサイドに使用している商品の紹介も掲載しているので、良ければご覧ください。

Oracle

【組み合わせ】【SQL】内部結合によるデカルト積

テストケースを考えるときに組み合わせを頭ですべて考えるのは、過剰になりすぎたり、過不足になったりと、本当に正式なパターンが洗い出されているのか不安ではないかと思う。 そういうときにデカルト積により、テストパターンの組み合わせを網羅できれば、…

SQL*PlusによるOracleインスタンスの起動

START SYSDBA権限を付与されたユーザーのみ可能。1.SHUTDOWN インスタンスの停止2.NOMOUNT インスタンスの起動、初期化パラメータファイルの読み込み インスタンスが起動されるということは、SGA、バックグラウンドプロセスも有効になる。3.MOUNT 制御ファイ…

Oracle Database 18c Express Editionの初期設定

インストールして使おうとしたら、11gと違って、デフォルトでPDBが設定されていた。最初はユーザーすら作成できないので、いろいろ設定を行うことに・・・ 1.最初にやるべきは、SYSユーザーでPDBに切り替えなければいけない。 /* Oracle 18C ExpressEdition…

【ORACLE】インデックス設計

読みにくいかもしれないが貼っておこう。テーブル設計をするときは、日常運用で想定されるトランザクション数およびデータ件数を考えて行うが、 データの格納パターンも考えて、カーディナリティや頻繁に実行される検索条件も想定しておかないと、 インデッ…

【コマンドプロンプト】FCコマンド

フリーソフトのWINMERGEというソフトでよくテキストの比較を行うことがよくあるけど、 コマンドプロンプトでも比較するコマンドがある。それがFCというコマンド C:\Users\owner>fc /? 2 つのファイルまたはファイル セットを比較し、相違点を表示します。 FC…

【Oracle】データ件数におけるページ分けの計算

タイトルの表現がちょっとよく分からなかったら申し訳ないのだが、 よく、WEBとかで〇〇件中、XX~YY件とかって分けて表示することがあると思う。 今回はその総件数の中で、どのページにどこからどこまでのデータを何件表示されるかという計算ロジックを作っ…

【Oracle】よくあるSPLIT関数を実装する。

さすがにそのままの仕様を実現することはできなかったが、 かろうじてそれに近いものを公開しようと思う。今回使用しているTYPEは以下を参照 fubukin.hatenablog.com create or replace FUNCTION SPLIT_REC ( /* 引数: STR :区切り文字の入った文字列 STR_SP…

【ORACLE】正規表現

正規表現でのチェックは、正規表現自体を理解していれば 非常に有用且つ開発が楽になる。 ただ、基本的にはサーバーサイドで使用することは あんまり良くない。 その理由として、 バックトラッキング(文字のチェック等が構文によって最初からやり直されるこ…

【ORACLE】エラーコードの割り当て

RAISE_APPLICATION_ERRORという関数を使えば、 エラーコードの割り当てとメッセージを指定することができる。 ただし、ユーザー定義のエラーとして使用が許可されている番号は -20000〜-20999 までの 1000 コード分らしい。 トリガーで例外エラーとして処理…

【Oracle】複合トリガー

Oracle11gからの新しい機能。 基本的に行トリガーは自分自身のレコードを更新することはできない。 でも、複合トリガーを使うとそんなことができてしまったりする。 これは便利ではあるが、開発では非機能要件をしっかり考慮しておかないと 運用でかなり危な…

【Oracle】ネイティブコンパイル

サーバーのメモリを消費する分、 30%くらい処理速度が向上するらしい。サーバーのスケールアップを考えた上で、 考慮したいところ。 /*常にネイティブコンパイルを行うように設定を変更する*/ ALTER SYSTEM SET PLSQL_CODE_TYPE = NATIVE; / /*以下、限定的…

【Oracle】ユーザー範囲の統計更新

一個ずつやるよりは良いのではないかと思う。 BEGIN DBMS_STATS.GATHER_SCHEMA_STATS ( OWNNAME => 'スキーマ名(ユーザー)' ,OPTIONS => 'GATHER' ) ; END;

【Oracle】DBセッション確認

接続セッションの状態を確認するSQL ACTIVEセッションが一つ増えるけど、実行している自分になるので気にしないでおこう SELECT TO_CHAR(SYSDATE,'yyyy/mm/dd HH24:MI:SS'), S.STATUS, S.USERNAME, NVL(S.SQL_EXEC_START,S.PREV_EXEC_START), S.LAST_CALL_ET…

【Oracle】ユーザーテーブルの情報抽出

必要なオブジェクトだけ欲しい場合は、コメントのところで条件を指定する SELECT T.TABLE_NAME AS "テーブル物理名", TC.COMMENTS AS "テーブル論理名", T.tablespace_name AS "テーブルスペース名", C.COLUMN_ID AS "カラムID", CASE WHEN PK.COLUMN_POSITI…

【Oracle】オブジェクトのCREATE文を自動作成する

DB移行したいときとかに 使ってみるといいかもしれない。ただ、ここで紹介する呼び出しはvbscriptでADODB使ってるので その環境がない人は別の接続方法で試してほしい。「SQL_DDL.vbs」として以下のソースコードをDB接続先情報を記述して保存する Option Exp…

【Oracle】DBMS APIでCSVを出力してみる

DBMS APIを使って、CSVの出力するようなファンクションを作ってみた。SQL文を引数にして、テキストが吐き出せるので 何かしら便利に使えそうだとは思っている。とりあえず、適当な型を用意しよう。 CREATE OR REPLACE TYPE STD_VALUE4 AS OBJECT ( VALUE01 V…

【Oracle】DBMS APIでテーブル定義型の確認

SQL文字列を引数にして、そのSQL文字列のテーブル構成情報を出力する。 既存プログラムのSQLのフィールド解析とかで使えそう。まずは型を適当に作成 CREATE OR REPLACE TYPE VALUE10 AS OBJECT ( VALUE01 VARCHAR2(500), VALUE02 VARCHAR2(500), VALUE03 VAR…

【Oracle】トリガーでログを記録する為のテーブルとトリガーのプロシージャーの作成

ダミーのようなテーブルをあらかじめ作成して テーブルにデータが追加、更新、削除が行われたとき、 そこに変更ログを記録するようなことができると、 更新以前の状況の更新過程が分かるようになるので便利かもしれない。そんなダミーテーブルの作成と、更新…

【Oracle】簡易的にユーザーを作成

DBA権限持ってるユーザーから実行しないとできないと思うけど、 とりあえずユーザーを作成する動的SQLを載せておこうと思う。 権限設定とかいろいろ面倒なので、テスト環境で実行するときなどは考えなくて済むのではないかと思う。 CREATE OR REPLACE PROCED…

【Oracle】バルクバインドでパイプライン関数を作る

TYPEとかの最初の設定は以下の記事を参照にしてください。 fubukin.hatenablog.com フェッチしてバルクバインドするときにリミット値を指定して、 数件ずつデータを出力する方法をとったら、分散処理されて早くなるのだろうか?ただ、実績としては何万という…

【Oracle】汎用的に使えるファンクション関数を作る

TYPEを使用したパイプラインファンクション Oracleの上級テクニックになるのかな? さらにこれよりも複雑なパラレルパイプラインファンクションというのがあるけど、 汎用的に使えるものを作るのであれば、これくらいでいいかな思っています。まずはTYPE(オ…