32 ビットの Microsoft Windows XP (Professional Version 2002 Service Pack 3) で動作する MySQL 5.6.11 を使用しています。MySQL sys_exec
UDF をインストールしました。私は 32 ビット Windows で実行しているので、このlib_mysqludf_sys.dllC:\Program Files\MySQL\MySQL Server 5.6\lib\plugin\
を使用しました (デフォルトのインストールであるため、以下に配置されています)。
その後、次のコマンドを実行しました(作成済みのデータベースにログインした後)。
mysql> CREATE FUNCTION sys_exec RETURNS INT SONAME 'lib_mysqludf_sys.dll';
Query OK, 0 rows affected (0.02 sec)
次のように、すでに PL/SQL ストアド プロシージャを作成していました。
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `country_push`()
BEGIN
SET @result=sys_exec('curl http://localhost:8080/ContextPath/push-update-country');
END
このプロシージャは、データベース トリガーによって呼び出されることが想定されており (これは適切に行われています)、したがって、このストアド プロシージャがトリガーによって実行された場合、前述の URL で HTTP GET 要求を発生させる必要がありますが、URL で HTTP GET 要求は発生しません。とあるイベントで。
コマンド ラインで手順を手動で実行しても、次のように成功します。
mysql> CALL country_push();
Query OK, 0 rows affected (0.08 sec)
sys_exec()
関数は1
次のように成功フラグを返します。
mysql> SELECT sys_exec('curl http://localhost:8080/ContextPath/push-update-country')
AS result;
+--------+
| result |
+--------+
| 1 |
+--------+
1 row in set (0.06 sec)
GlassFish (4.1) アプリケーション サーバー上で実行されている Java サーブレットが既に存在し、次のようにこの HTTP GET 要求をリッスンすることになっています。
@WebServlet(name = "PushCountry", urlPatterns = {"/push-update-country"})
public class PushCountry extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("PushCountry called.");
}
}
System.out.println("PushCountry called.");
メソッド内の行はdoGet()
、上記の MySQL が実行されると、サーバー端末で何も生成されません (実行/呼び出しされないため)。
MySQL を使用してこれを行うのは現実的ではありませんか、他に不足している可能性があるものはありますか、それとも古い EOL ダイナソー : Windows XP ですか?
私が使用している共有ダイナミック リンク ライブラリは適切でない可能性があります。これが私を超えている場合は、明確にしてください。
編集:
入るときは、
mysql> SELECT sys_eval('id');
MySQL は、次のエラー レポートで終了またはクラッシュします。
このダイアログを閉じると、MySQL は次のエラー メッセージを残します。
エラー 2013 (HY000): クエリ中に MySQL サーバーへの接続が失われました
システム自体が再起動されるまで、または再起動されない限り、再接続に失敗します。
おそらく、後でオペレーティング システム自体を再インストールすることを考えるでしょう。