by shigemk2

当面は技術的なことしか書かない

OracleをDockerコンテナで使えるようにしたい(Ubuntu/fish-shell) SQLグラフ理論のサンプルコードを実行できるようにしたい人生だった

12cじゃなくて11gなんだけど、まあいいか。

環境

  • Ubuntu 16.04
  • fish 2.2.0

流れ

  1. sqlplusを使えるようにすること
  2. OracleのDockerコンテナを立ち上げること

sqlplusを使えるようにすること(fish shell)

これについては各所で言われているので、詳細は省きます。なお、これらをダウンロードするためにはOracleのアカウントが必要だと認識しています。

ダウンロードサイトからoracle-instantclient12.1-basic/sqlplus/develをダウンロードしておく。 Instant Client downloads for Linux x86-64

rpm to debのために以下を実行しとく。

$ sudo apt-get install alien

rpm to debして、それらをインストールしておく。

sudo alien oracle-instantclient12.1-basic-12.1.0.2.0-1.x86_64.rpm
sudo alien oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.x86_64.rpm
sudo alien oracle-instantclient12.1-devel-12.1.0.2.0-1.x86_64.rpm 
sudo dpkg -i oracle-instantclient12.1-basic_12.1.0.2.0-2_amd64.deb oracle-instantclient12.1-sqlplus_12.1.0.2.0-2_amd64.deb oracle-instantclient12.1-devel_12.1.0.2.0-2_amd64.deb 

config.fishに書いておく→source ~/.config/fish/config.fish ただしこのあたりはTODOで、set -gxって1回しか使えない??本当??っていうのは調べておくこと。exportではなくsetを使うことがポイント。

set -gx PATH xxxxxxx /usr/lib/oracle/12.1/client64/bin $PATH 
set LD_LIBRARY_PATH /usr/lib/oracle/12.1/client64/lib
set NLS_LANG Japanese_Japan.UTF8

Oracle

ぶっちゃけこのあたりは何でもいいと思う。自作してもいい。

ただドキュメントをなぞるだけ。pullすらしてない。

sudo docker run -d -p 49160:22 -p 49161:1521 -e ORACLE_ALLOW_REMOTE=true wnameless/oracle-xe-11g

あとは。

sqlplus system/oracle@localhost:49161/xe

SQL*Plus: Release 12.1.0.2.0 Production on 土 924 19:58:10 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.



Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
に接続されました。
SQL> 

お好みでrlwrapをつけるといいと思う。

SQLグラフ理論のサンプルコードを実行できるようにしたい人生だった

いけたとおもう。

CREATE FUNCTION ReverseString (instring IN VARCHAR)
RETURN VARCHAR 
IS
BEGIN 
  IF LENGTH(instring) = 0 OR LENGTH(instring) = 1 -- 停止条件
  THEN RETURN (instring);
  ELSE RETURN -- 文字列を真ん中で区切って左右を入れ替える
        ReverseString(SUBSTR(instring , LENGTH(instring) / 2+1))
     || ReverseString(SUBSTR(instring ,1, LENGTH(instring) / 2 ));
  END IF;
END;
/

SELECT ReverseString('abcde') from dual;

ファンクションが作成されました。

SQL> SQL> 
REVERSESTRING('ABCDE')
--------------------------------------------------------------------------------
edcba

と思ったら、

SQL> INSERT INTO Personnel_OrgChart VALUES('Albert',   NULL,         1000);
INSERT INTO Personnel_OrgChart VALUES('Albert',   NULL,   1000)
*
行1でエラーが発生しました。:
ORA-00001: 一意制約(SYSTEM.SYS_C006998)に反しています

どうなのか。このあたりは自分でなんとかせいってことなのか。

glossary: Joe Celko's Trees and Hierarchies in SQL for Smarties, 2nd Edition

用語 英語 内容
ノード Node 点/頂点
エッジ Edge
有向グラフ Directed graph 方向を持つグラフ
無向グラフ Undirected graph 方向を持たないグラフ
グラフの位数 Order of Graph グラフに含まれるノードの個数
次数 Degree あるノードに接合するエッジの数。有向無向は問わない
入次数 Indegree 有向グラフにおいてあるノードに入っていくエッジの数
出次数 Outdegree 有向グラフにおいてあるノードから出て行くエッジの数
部分グラフ Subgraph 別のグラフのエッジとノードの部分集合になっているグラフ
歩道 Walk ノードを一筆書きでたどって作られた部分グラフ
経路 Path ノードが重複を持たない歩道
閉路 Cycle すべてのノードの次数が2になるようループを作る部分グラフ
連結グラフ Connected graph すべてのノードのペアが経路によって結ばれたグラフ
Forest 別々の木の集合