LoginSignup
0
0

More than 5 years have passed since last update.

PL/SQLからSSTPを発射する方法

Posted at

はじめに

Sakura Script Transfer Protocolな方のSSTPです。
これはblogの残骸から移植した投稿です。

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.png

[追記 2015.11]
今風だと、PL/SQLからslackに投稿とかのほうがウケがいい気もするネタだと思った。

えんいー。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0