« PL/SQL で Python Challenge 11 謎は解けた。 | トップページ | Mouse »

2005年8月18日 (木)

PL/SQL で Python Challenge 11 完結編

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 コマンドを利用する。)


jdev_deploy


    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 が作成される。

dir

    9.うまくいったようなので結果を見てみよう! (内容はいつものように隠してある)

level11_copy


Level12 へつづく

|

トラックバック


この記事へのトラックバック一覧です: PL/SQL で Python Challenge 11 完結編:

コメント

コメントを書く