DB

PL/SQL配列・ループテスト

PL/SQLの配列=コレクション型 に詳細がある。配列は1オリジン。配列のメソッドについては、 配列で使用可能なメソッド が詳しい。 /* * C:\> C:\ORACLE\PRODUCT\XX.Y.Z\CLIENT_1\bin\sqlplus.exe USER/PASSWORD@SCHEMA * SQL> SET SERVEROUTPUT ON */ DECLA…

明示的なカーソル

DB

参考は以下。 https://www.shift-the-oracle.com/plsql/cursor-loop.html -- -- 指定行数だけ昇順IDを表示 -- SET SERVEROUTPUT ON DECLARE -- 引数なしの場合は()もいらない CURSOR cX(MAX NUMBER := 100) IS SELECT ROWNUM, A.* FROM (SELECT ID FROM B WH…

OracleでDDLを実行するとその前のDMLがコミットされる件

DB

表題のとおりなんだけどマニュアルに書いてありました。 様々な種類のSQL文 Oracle Databaseは、暗黙的にすべてのDDL文の前後で現在のトランザクションをコミットします。

Oracle SQLでのコメントの書き方

DB

OracleのSQLファイルに以下のようにコメントを書いていたら動かなかった。 UPDATE MYTABLE SET COL1='TEST' WHERE ID='FOO'; -- これはテスト これってよくある間違い?

SI Object Browser for Oracleで実行計画でのエラー

DB

SI Object Browserで実行計画ボタンをクリックしてSQL実行をクリックすると、 ORA-00911: 文字が無効です。 のダイアログが表示される。実行計画なしだと問題がないのに。 どうも、最後のセミコロン";"を削除すると動作するようだ。それこそ(;o;)な感じ。 こ…

SQLでFOR UPDATEを使って更新する例

DB

セレクト結果の1レコードずつ更新したい場合の例。 以下を参照して作成。 SQL を繰り返し実行する 【ORACLE】日付の加算減算、時刻の加算減算 SET SERVEROUTPUT ON DECLARE cursor CUR is SELECT ID,NAME,UPDATE_TIME FROM テーブル名 WHERE '1000' <= ID A…

PL/SQLのFORループで指定IDのデバッグ表示

DB

テーブルのIDカラムが4桁(0000 .. 0009)の場合。 SET SERVEROUTPUT ON DECLARE vID テーブル名.ID%TYPE; vName テーブル名.NAME%TYPE; vUpdateTime テーブル名.UPDATE_TIME%TYPE; BEBIN FOR i IN 0 .. 9 LOOP vID := TO_CHAR(i, 'FM0000'); -- 4桁 SYS.DBMS_…

SQL*Plusでの表示の基本

備忘録。デフォルトだとなんであんなに見辛いんだろう。 set linesize 1000 set trimspool on set pagesize 0

Oracleのストアドでのエラーの備忘録

DB

以下のエラーについて調べたのでまとめ備忘録。 ORA-04068: パッケージの既存状態は廃棄されました。 ORA-04061: package body “スキーマ.パッケージ名"の既存状態は無効になりました。 ORA-06508: PL/SQL: コールしているプログラム単位が見つかりませんで…

Oracle CREATE DIRECTORYでディレクトリオブジェクトを使用

DB

PL/SQLでUTL_FILE()なんかを使う場合に便利なディレクトリオブジェクト CREATE DIRECTORY オブジェクト名 AS '/path/to/foo/bar'; GRANT READ ON DIRECTORY オブジェクト名 TO ユーザ名; GRANT WRITE ON DIRECTORY オブジェクト名 TO ユーザ名; こうしておく…

バルクバインド(BULK BIND)の例

DB

セレクト結果を一行づつ処理したいってとき、BULK BIND(BULK FETCHもあるみたい)っていうこともoracleではできるんですね。 -- バルクバインドの例 SET SERVEROUTPUT ON DECLARE TYPE TLINE IS TABLE OF テーブル名%ROWTYPE INDEX BY BINARY_INTEGER; vLIN…

SQLで2つのカラムに分割された最後のCR、最初のLFを調べる方法

DB

oracleで2つのカラムにCRLFが分割されて保存されてしまった場合を調べる方法。 select id from テーブル where desc1 like '%' || chr(13) and desc2 like chr(10) || '%'; ちなみに以下の正規表現ではできなかった。 select id from テーブル where regexp…

レコード確認してからのINSERT

DB

レコードがない場合に限りinsertする方法。キーにしてエラーにすればよいって言われるのはわかっているけど、エラーメッセージ見たくない(見せたくない)人向け。 INSERT INTO テーブル(col1, col2) SELECT '値1', '値2' FROM DUAL WHERE NOT EXISTS(SELECT…

Oracle NVARCHAR2(1600)で1600文字入らない件

DB

NVARCHAR2のカラムを大きくして大量文字を入力しようとすると以下のエラーが発生して入力できない。 エラー:: ORA-01461 : LONG値はLONG列にのみバインドできます。 ググってみたところ、 http://www.projectgroup.info/tips/Oracle/errorcode/ORA01461.html…

Oracle NVARCHAR2を文字列連結するときの注意

DB

検索したい該当カラムがNVARCHAR2でも連結すると暗黙変換でVARCHAR2となるらしく、4000byte以上はエラーとあるため、以下のようにTO_CLOB('')を連結しとく必要がある。 SQL> select col1 from foo_table where (TO_CLOB('') || col1 || col2) like '%検索%';…

PostgreSQLデータベースのSlony-Iでのレプリケート例

参照サイト http://d.hatena.ne.jp/ttshrk/20110414/1302760971 http://tsunokawa.hatenablog.com/entry/20110412/1305643454 http://news.mynavi.jp/column/yetanother/031/ 環境 マスタ側(更新側) 172.16.167.144 スレーブ側(参照側) 172.16.167.130 O…

SQLite3のサンプル

SQLite3のC言語APIとsqlite3コマンドをCentOS6.4で動作検証してみたときの備忘録。 環境 [kohchi@localhost sqlite]$ cat /etc/redhat-release CentOS release 6.4 (Final) [kohchi@localhost sqlite]$ cat /proc/version Linux version 2.6.32-358.6.2.el6.…

PostgreSQLのUPDATE文がバージョンによって違う件

DB

PostgreSQLにてUPDATE文を使用する際にはバージョンによってリスト構文で書けない場合があったので備忘録。 PostgreSQL8系 http://www.postgresql.jp/document/8.1/html/sql-update.html UPDATE table名 SET col1=val1,cal2=val2 WHERE col3='foo'; PostgreS…