12cじゃなくて11gなんだけど、まあいいか。
環境
流れ
- sqlplusを使えるようにすること
- 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 土 9月 24 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)に反しています
どうなのか。このあたりは自分でなんとかせいってことなのか。