PL/SQLからSSTPを発射する何か。


OracleのPL/SQLからSSTP飛ばせるのか気になって実装してみたらすんなり行っちゃったときのコード。誰得。

CREATE OR REPLACE FUNCTION TEST_SSTP_NOTIFY
RETURN VARCHAR2
IS
 conn UTL_TCP.CONNECTION;
 x PLS_INTEGER;
 scripts VARCHAR2(4000);

BEGIN
 -- 毒電波送信準備
 conn := utl_tcp.open_connection(
 remote_host => 'localhost',
 remote_port => 9821,
 charset => 'JA16SJIS');

-- 毒電波本体
 scripts := '\h\s[0]SCOTTさんは星になりました。';
 scripts := scripts || '\u\_w[1500]……おい。';
 scripts := scripts || '\h\n\_w[1500]…はい?';
 scripts := scripts || '\u\n\_w[1500]…せつないな。';
 scripts := scripts || '\e';
 -- 電波ゆんゆん
 x := utl_tcp.write_line(conn, 'NOTIFY SSTP/1.1');
 x := utl_tcp.write_line(conn, 'Sender: 毒電波 from PL/SQL');
 x := utl_tcp.write_line(conn, 'Event: onSendMessage');
 x := utl_tcp.write_line(conn, 'Script: ' || scripts);
 x := utl_tcp.write_line(conn, 'Charset: Shift_JIS');
 x := utl_tcp.write_line(conn);

-- 例外?なにそれおいしいの?
 BEGIN
 LOOP
 dbms_output.put_line(utl_tcp.get_line(conn, TRUE));
 -- 本来ならばここで色々しないといけない
 END LOOP;
 EXCEPTION
 WHEN utl_tcp.end_of_input THEN
 NULL; -- end of input
 END;


 utl_tcp.close_connection(conn);

RETURN 'OK';
EXCEPTION
 WHEN OTHERS THEN
 RETURN 'あなたの意に反してこのエラーが見えているでしょうか?';
END;

これをご家庭のOracleに食わせた上で、sqlplusなりで


SELECT TEST_SSTP_NOTIFY FROM DUAL;

って発行したら毒電波が飛ぶはず。

もし懐かしのApache風のエラーメッセージが出るなら「ACL設定」でググればいいかも。

以下、実行時のSS。

hoge

カテゴリー: pl/sql パーマリンク