わたがし食べたい

アイドルマスター卯月Pによるつれづれなる技術ブログ(仮)

PL/SQL と PL/pgSQL のout引数が refcursor のプロシージャ を実行する

out引数がカーソルの時のファンクションの実行について

記事が少なかったのでメモしておく。

 

 

とりあえずテーブルを作る 
>||
-- create
CREATE TABLE Test(
id numeric,
name VARCHAR(255)
);
とりあえずレコードも作る 
--レコードを作る
insert into Test values(1,'aaa');
insert into Test values(2,'bbb');
insert into Test values(3,'ccc');
insert into Test values(4,'ddd');
insert into Test values(5,'eee');
insert into Test values(6,'fff');

 

 Oracleの場合

PL/SQLの作成

create or replace procedure get_test(
in_id number
,full_cur out sys_refcursor
,id_cur out sys_refcursor
)
is
begin
 open full_cur for
select * from test;

open id_cur for
select * from test where id =in_id ;

END;
/

oracleではプロシージャで作成。

Postgresではプロシージャという概念がないのでファンクションで作成します。

PL/SQLの実行

var full_cur refcursor;
var id_cur refcursor;
exec get_test(1,:full_cur ,:id_cur );

print full_cur ;
print id_cur ;

callでも行けるはずですが、確認してません。

print でカーソルの中身を確認できます。

 

f:id:kuroaka3:20180520133956p:plain

PostgreSQLの場合

PL/pgSQLの作成

create or replace function get_test(
in in_id numeric
,out full_cur refcursor
,out id_cur refcursor)
returns record
as $$
declare
begin

open full_cur for
select * from test;
--closeは書かない

open id_cur for
select * from test where id =in_id ;
--closeは書かない
end;
$$ language plpgsql;

closeをかくのはReturnで明示的に戻している場合で、(たぶん)

out引数の時にcloseしちゃうと返った時にカーソルが閉じてしまって見れなくなります。

PL/pgSQLの実行

begin;
select * from get_test(1);
fetch all in "<unnamed portal 3>";
fetch all in "<unnamed portal 4>";
rollback;

f:id:kuroaka3:20180517234108p:plain

unnamed portal (無名ポータル)にカーソルが返ってくるので

fetchで中身を見てあげる感じです。

※3とか4なのは1回ミスったからです。

 

 

 

 

Docker で Oracle DataBase 11gR2 を構築

12CはPDBとかCDBとかあるので面倒だなって思ったので

11gR2を公式のDockerファイルを使って構築してみる。

 

参考

公式 Oracle Database の Docker イメージを構築 - #chiroito ’s blog

 

まずはGitHubのclone or Download からzipファイルをダウンロード

(gitで落とせる人はcloneでもよい)

https://github.com/oracle/docker-images

 

11R2なので以下から「Oracle Database Express Edition 11g Release 2 for Linux x64」ファイルをダウンロード

Oracle Database Express Edition 11g Release 2のダウンロード

 

docker-images-master\OracleDatabase\SingleInstance\dockerfiles\11.2.0.2

にzipファイルのまま配置

 

dockerにて以下のコマンド実行

 ./buildDockerImage.sh -v 11.2.0.2 -x

 

次のようなログが出たらOK

Oracle Database Docker Image for 'xe' version 11.2.0.2 is ready to be extended:
--> oracle/database:11.2.0.2-xe
Build completed in 358 seconds.

 

確認

f:id:kuroaka3:20180517210036p:plain

出来てる!

docker run --name orcl -p 1521:1521 -p 5500:5500 -v /c/oradata:/opt/oracle/oradata \
-e ORACLE_SID=orcl oracle/database:11.2.0.2-xe

f:id:kuroaka3:20180517212433p:plain

エラーが発生している。

 

調べたらあった。

DockerでOracleデータベース11g XEを構築 - メンチカツには醤油でしょ!!

--shm-size=1g

上記のオプションを設定しなければならなかったらしい

 

runするときに以下のように実行した

docker run --shm-size=1g --name orcl -p 1521:1521 -p 5500:5500 -v /c/oradata:/opt/oracle/oradata \
-e ORACLE_SID=orcl oracle/database:11.2.0.2-xe

 途中ですが、こんな感じ

f:id:kuroaka3:20180518221534p:plain

 

無事に出来そうです。

Docker で イメージファイルを読み込む

前々回の記事の続き。

 

前回は古いDocker でpostgresの環境を作成した。

今日はUpgradeしたDockerでsaveしたファイルをloadする。

 

前回はつかえなかった

docker container lsが使えるようになっています。

下位互換もあるらしいのでdocker psもそのまま使える。

f:id:kuroaka3:20180515230931p:plain

 

loadはsaveとやることが逆なだけです。

イメージファイルが置いてあるディレクトリに移動して以下のコマンドを実行。

docker load < イメージファイル名 / docker load < postgres_new.tar.gz

f:id:kuroaka3:20180515231526p:plain

実行したら以下のようにログが表示される

f:id:kuroaka3:20180515231628p:plain

 

imageを確認する

docker images

f:id:kuroaka3:20180515231744p:plain

 

コンテナの作成

docker run -d --name postgres10 -e POSTGRES_PASSWORD=password -p 15432:5432 postgres_new

f:id:kuroaka3:20180515232411p:plain

前回と違うのはイメージ名はイメージファイルと同じになっているということです。

 

コンテナ内に入ってpostgresに接続できるのを確認しました。

やっと昨日に追いついた。

f:id:kuroaka3:20180515232633p:plain

 

次回はpl/pgSQLについてやっていきたい。

Docker Toolbox 最新版をインストールする

前回の記事でDocker が古いことに気づいたので

最新版を入手した。

その方法をメモしておく。

 

環境は

Win7 pro

 

まずは以下のリンクへ飛ぶ。

Install Docker Toolbox on Windows | Docker Documentation

Docker Store

windows用のDockerをダウンロードする。

※赤枠のGet Docker  Toolboxをクリックでダウンロードが始まります。

f:id:kuroaka3:20180515222237p:plain

 

DockerToolbox.exe

がダウンロードされるのでダブルクリック。

 

18.03.0-CEをインストールします。

EE版はお金がかかります。

 

Welcome to the Docker Toolboc Setup Wizard

f:id:kuroaka3:20180515222323p:plain

Next>

 

Select Components

f:id:kuroaka3:20180515222637p:plain

全部最新版にするのでそのままNext>

 

 

Select Additional Tasks

f:id:kuroaka3:20180515222932p:plain

上から

デスクトップにショートカット作成

環境パスの設定追加

VMのupgrade

NDISSドライバーのインストール

デフォルトのままNext>

 

Ready to Install

f:id:kuroaka3:20180515223140p:plain

Installボタン

 

インストール中~

f:id:kuroaka3:20180515223215p:plain

 

何回か以下のようにデバイスをインストールするか聞いてくるのでインストール。

ちなみにインストールしないにするとDocker Toolboxのインストールも失敗します。

f:id:kuroaka3:20180515223702p:plain

VM使うためのコンポーネント

 

無事に終了

f:id:kuroaka3:20180515224138p:plain

 

 PCを再起動して起動しようとしたところ、エラー・・・

 

以下の記事を参考にVirtualBoxの修復したら治りました。

DockerToolbox-1.12.0.exe を win7 に installしたら、Docker Quickstart Terminal の実行でerror - end0tknr's kipple - 新web写経開発

 

次は前回作ったイメージファイルをloadで読み込みます。

Docker で PostgreSQL 環境を作成する

 

PostgreSQL環境を作成する

Docker を使ってPostgres環境を作ろうと思い、

以前入れたdockerをアンインストールして、再度インストール。

 

すると、以下のようなエラーが発生した。

 

前提

これはBiosの設定から仮想環境の設定を有効にする必要があるため、

Biosの設定を見てきます。

f:id:kuroaka3:20180514220811p:plain

 

はい、見てきました。

f:id:kuroaka3:20180514223100p:plain

 

これで使えるようになりました。

いよいよ、postgres環境の作成です。

 

以下の記事を参考に作成していきます。

Docker公式イメージで開発用RDBをゲットだぜ(PostgreSQL編)

PostgreSQLのDockerイメージの使い方 - SIerだけど技術やりたいブログ

 

docker操作

(実行コマンド)

 docker run -d --name postgres10 -e POSTGRES_PASSWORD=password -p 15432:5432 postgres:10

 

今回使ったオプションは以下の通り

-d

バックグラウンドで実行

--name

イメージの名前を設定 

-e

環境変数の設定 

-p

ポートフォワード

 

※ちなみに私のPCに入っているDockerは11なのでコマンドが古いです。

併せて現在のコマンドも載せておきます。

アンスコした時に新しいバージョンインストールしろよって感じですね。。。

 

(コンテナの確認)

 docker ps / docker container ls

f:id:kuroaka3:20180514224633p:plain

 (imageの確認)

 docker images / docker image ls

f:id:kuroaka3:20180514224823p:plain

 

イメージが二つできている・・・? 

とりあえずコンテナ内にはいってみる。

 docker exec -ti postgres10 /bin/bash

-ti

ターミナルでコンテナを操作する。

(これをつけないと操作できずにただ抜けるしかなくなります)

f:id:kuroaka3:20180514230308p:plain

さて、 無事にログインできました。

 

バージョンを確認してPostgresに接続する。

 psql --version

 psql -U postgres

f:id:kuroaka3:20180514230718p:plain

 PostgreSQL環境の作成が完了。

 

おまけ

イメージを作成する。

dockerをバージョンを上げるためにimageをsaveしてtar.gzファイルにして吐き出しておく。

 

特に何もしていないけど改めてimageを作る。

postgres_newというimage名で作ります。

docker commit もとにするコンテナ名 image名 / docker commit postgres10 postgres

f:id:kuroaka3:20180514233915p:plain

imageを確認するとpostgres_newが出来ていることが確認できました。

 

イメージをファイルにする

ではsaveでファイルにします。

docker save image名 > ファイル名

/ docker save postgres_new > postgres_new.tar.gz

f:id:kuroaka3:20180514234255p:plain

 ちゃんと吐き出されていました。

f:id:kuroaka3:20180514234832p:plain

 次回はdockerの最新版を使ってこのimageをloadするところから始めます。

いつになったらpostgresに触れるのか。。。

Oracle Master Silver 12c 勉強方法

OracleMasterとは

OracleDatabaseのベンダー資格です。

OSS-DBと違って資格に期限はありません。

 

今回かくのはSilverの勉強方法受験の感想です。

金額がだとか、試験申し込みだとかは割愛します。

Silverの記事読む人は多分もうご存じだと思いますので。。。

 

なお、Silverは、前提条件としてOracleMasterBronzeに合格している必要があります。

(余談ですがJavaのBronzeはSilverから受けることが出来ます。Bronzeが日本限定の資格だからでしょうか・・・?)

 

SilverについてのOracleの公式ページは以下です。

http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=5001&get_params=p_exam_id:1Z0-062

 

受験結果

お恥ずかしい話ではありますが、3回受けてます。

2回(2017年6月、2017年7月)は試験改訂前ですので、公式の言葉を借りるなら重箱の隅をつつく問題をうけていました。

2017年8月に3回目にして75%で合格しました。(受験料だけで10万近く。。。)

改訂前はASM関連の問題が多く、試験勉強に使っていた参考書(後述)にはほとんど書いていなかったので非常に困ったのを覚えています。

 

勉強方法

使った参考書

オラクルマスター教科書 Silver Oracle Database 12c

https://www.amazon.co.jp/dp/4798143561/

現在12cSilverの参考書はこちらしかありません。

私が勉強を始めたのが約1年前ですが、その時からこれ一冊しかなかった。。。

解説、問題集、問題集解説の3冊分冊です。

問題集は特に試験で類似が出ることはありませんでした。

正直改訂前は全く空気のような存在でした。

問題が改訂されてかろうじて息を吹き返したという印象です。

 

・【オラクル認定資格試験対策書】ORACLE MASTER Silver[Silver DBA11g](試験番号:1Z0-052)完全詳解+精選問題集 (オラクルマスタースタディガイド)

https://www.amazon.co.jp/dp/4797361867/

Bronzeでは非常にお世話になった安心と信頼の白本ですが、バージョンが違うこともあり、試験範囲が異なります。

ただ、個人的には黒本より解説は丁寧だったと思います。

 

・【オラクル認定資格試験対策書】ORACLE MASTER Gold[Gold DBA11g](試験番号:1Z0-053)完全詳解+精選問題集 (オラクルマスタースタディガイド)

https://www.amazon.co.jp/dp/4797361875

11gではGoldの範囲だったスケジューラなどが12cでは試験範囲になっています。

(バージョンが上がるごとに難しくなっているということですね。。。)

11gの白本で補えない箇所はこちらの参考書で勉強しました。

 

・クラムメディア

クラムメディア | Oracle 1Z0-062 資格問題集 - Oracle 12C Silver 問題集

12cSilver専用の問題がないのでこちらも購入して2,3問同じ問題が出ました。

私が購入した時は改訂前でしたのでASMの問題なども含まれています。

他の方の記事を見ると回答が間違っていることがおおいとありますが、

私が購入した時には回答は訂正されているものが多かったです。(それもどうなのwという話ですが。)

改訂後に受験するときにはお世話にはなりませんでした。

 

勉強期間

 年明けから勉強始めたので約半年間ですね。

業務でOracleをさわったことはないので(SQL以外)、結構苦労しました。

勉強する方は実機触ることをお勧めします。

私はBronzeの受験の時に構築したのに試験勉強を座学でおこないました。

 

また、会社の方でOracleSilverの研修もあったので併せて受講しました。

 

おすすめ

Oracle社で無料で行われているOracleMaster12c Silverのセミナーは受けた方が良いです。絶対に。

公式サイトにて日時は発表されるので定期的にチェックするとよいと思います。

私は公式サイトのお知らせは受験日時を決めたら2,3日に1回のペースで見ていました。

特に新しい情報が入ってくることは多くないので1週間に1度とかでもいいかもしれませんが、見ておいて損はないと思います。

(現に私は、試験改訂とセミナーの情報を発表当日に知れたので)

 

受験の感想

1・2回目(改訂前)

1回目に受けた時は絶対に無理だと思いました。結果は61%。

自社の研修でASMはあんまり出なさそうと聞いてASMほぼ勉強せず。。。

(黒本でもページ数少なかったので重要じゃないと思っていました)

実際に受けてみたらASMの問題90問中15問前後出るじゃないですか

いやいやいやw

なので2回目受ける前にはASMについてかなり勉強していきました。

とはいえ、黒本には書いてないので分からなかった問題を覚えて、公式のマニュアルで答え合わせ&試験範囲のワードから検索してあたりをつけて暗記、暗記、暗記。。。

2回目は正直受かったと思ったんですが、64%で落ちました。。。

2回目も分からなかった問題はすぐに公式のマニュアルで答え合わせ。

もし、受験時に「あー、だめかもー」とおもったら出来るだけ出題された問題を覚えて会場から出た時に答え合わせ、もしくはメモしておくことをおすすめします。

(1回目と2回目でかぶった問題は10問前後でした。)

 

3回目

正直今までが難しすぎて「えっ?」という感じ。拍子抜け。

これは間違いなく合格しているという確信を持ってました(再びw)

宿敵ASMが出ず、運用関連の問題が多かったです。

他の方も書いていましたが、素直な問題が多くなりました。

 

まとめ

正直、現在仕事をしていて、OracleDBは日本のシェアが小さくなってきているなと感じます。ランニングコストが非常に高いので。。。

ですが、OSS-DBと違い、OracleMasterは期限がありませんし(バージョンはありますが。。。)、将来海外を視野に入れている人は取っておいて損はないと思います。

ただ、DBで食っていきたい!という人以外はBronzeまでで十分かな、と感じます。

 

以上、OracleMasterSilver(12c)勉強方法でした。

 

 

 

 

 

 

 

はじめまして

このブログを開設しようと思ったのは

社会人5年目に突入したにもかかわらず、自分にはなにもないなあと思ったためです。

 

ブログを書いたり、文をしたためたりすることは好きなので

それをモチベーションにしつつ、技術力も同時にあげることができたらなぁと思っております。

 

初めのうちはネタがないので、受けた資格の話などをしていこうと思います。

 

どうぞよろしくお願い致します。