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)に反しています

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