PL/SQL で Python Challenge 11 完結編 Tweet
Level11は、 Level7及び、Level9で作成したパッケージを再利用したことと、、Level7で作成したjavaのコードを多少手直ししただけなので書き直したコードは15行程度だった。(全体では、Level7程度のコード量だが。。)
javaのコードの概要は以下のようになる。
- 1.問題の画像を、オラクルのDirectoryオブジェクトに置く。
- 2.PL/SQL で Python Challenge Level7で作成した、PL/SQLパッケージを再利用。Level7.getBfile()を利用して、1.説明した画像ファイルを外部LOBファイルとして取り込む。
- 3.javax.ImageIO をクラス利用して、外部LOBとして読み込んだ画像の複製を作る。(複製した画像は、背景色を黒にしておく)
- 4.3.で複製した画像(BLOB)に、2.で取り込んだ画像(外部LOB)から取り出した答えを描画。
- 5.答えを描画した画像(BLOB)を一時LOBとしてデータベースへ書き出す。 dbms_lob.createTemporary() を利用する。
- 6.一時LOBを PL/SQL で Python Challenge Level9 で作成した Level9.writeImageFile() プロシージャを利用して、オラクルのDirectoryオブジェクト以下に、level11.jpg というファイル名で書き出す。
- 7.前述のjavaクラスをデータベースへ配布する。(JDeveloper又は、loadjava コマンドを利用する。)
- 8.SQL*Plusより、Java Stored Procedureとして呼び出せるようにして実行!。Oracleは、MacOSX 10.3.9 Pahtnerに作成した、Oracle10g である。
cube: oracle$ sqlplus scott/tiger
SQL*Plus: Release 10.1.0.3.0 - Production on 水 8月 17 00:00:20 2005
Copyright (c) 1982, 2004, Oracle. All rights reserved.
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
に接続されました。
SQL> !cat level11.sql
-- level11
create or replace package level11 as
function getAnswer return number;
end level11;
/
show error
create or replace package body level11 as
function getAnswer return number
is
language java
name 'jp.discus.Level11.getAnswer() return java.lang.Intger';
end level11;
/
show errors
SQL> @level11
パッケージが作成されました。
エラーはありません。
パッケージ本体が作成されました。
エラーはありません。
SQL> set timi on
SQL> select
2 case
3 when level11.getanswer() = 1 then
4 '成功'
5 else
6 '失敗'
7 end as "結果"
8 from
9 dual;
結果
----
成功
経過: 00:00:05.68
SQL>
実行後、directoryオブジェクトに対応するフォルダには Level11.jpg が作成される。
- 9.うまくいったようなので結果を見てみよう! (内容はいつものように隠してある)
Level12 へつづく
| 固定リンク | 0
コメント