複数のSQLを連続して実行してくれるようなステキ機能を教えてもらいました。
過程でちょいちょい詰まったのでメモ。
ストアドの解説はこちら↓が参考になりました。
ストアドプロシージャの使い方(PostgreSQL)
詰1 ソフトが落ちる
300行のSQL他数行のSQLをストアドに登録しようとしたところ、A5:SQL Mk-2が落ちました。
重かったのかもしれないです。すまん…。
DBeaverというソフトに変えたら、長文SQLでもさく……っとはいかないけれど、落ちずに実行してくれるようになりました。
軽いので好きです。
インストールするときzipのものを使うとドライバがなかったりするのでexeを使いました。
詰2 Unterminated dollar quote started~
A5でもDBeaverでもでました。
検索でもよく出てくる気がします。
まずは単純な書きミスの場合。
(このミスする人他にいるんですかね)
CREATE PROCEDURE hoge_sch.huga()
LANGUAGE plpgsql
AS $$
(略)
END;
$procedure$
LANGUAGE plpgsql;
これだとエラーになります。
ドル引用符=クォーテーションのような役割らしいので、これだとクォーテーションを閉じたことにならないようです。
そして引用符には名前もつけれるらしいです。
ここがはまったポイントですが。
CREATE PROCEDURE hoge_sch.huga()
LANGUAGE plpgsql
AS $$
(略)
END;
$$
LANGUAGE plpgsql;
こうか
CREATE PROCEDURE hoge_sch.huga()
LANGUAGE plpgsql
AS $procedure$
(略)
END;
$procedure$
LANGUAGE plpgsql;
こう書くとエラーはなくなります。
ドル引用符に名前をつけていると、終わりの引用符がないよ! と怒られるようなので、名前を付けるときは注意しましょう。
番外編 Unterminated dollar quote started~
ソフトの設定がよろしくない場合もあります。
A5であれば
にすると動きます。
ストアド開いた時点でおおよそプロシージャモードになっているのですけども。
DBeaverであれば、
接続しているデータベースを右クリック->編集 接続->接続設定->Postgres SQLで
Show $$ quate as :の部分をStringに変更してOKをクリック。
これでドル引用符が文字列扱いされるようになります。
うまく実行できないときに発見した設定でしたが、ストアドというか平文でドル引用符使いたい人向けの設定な気が。
趣旨変わってしまいましたが、こういう設定もあるんだなあというメモ。