私は scriptella を初めて使用し、これまでのところ非常に便利であることがわかりましたが、次の障害にぶつかっています。次のような MYSQL データベース内に既に存在する SQL プロシージャがあります。
DELIMITER //
CREATE PROCEDURE FOO(IN input_param INT, OUT output_param1 INT, OUT output_param2 INT)
BEGIN
/* real FOO sets output_params (conditionally) based on input_param */
/* AND updates an internal table */
SET output_param1 = 1;
SET output_param2 = 2;
END//
DELIMITER ;
次のように、Scriptella 内からこのプロシージャを呼び出し/呼び出したいと思います。
<query connection-id="in">
SELECT SomeColumn FROM SomeTable;
<query connection-id="out1">
CALL FOO(SomeColumn, @OUT1, @OUT2); // ERROR1 exception from this line, see below
<script connection-id="jexl">
etl.globals['OUT1'] = @OUT1; // ERROR2 doesn't like "@"
etl.globals['OUT2'] = @OUT2;
</script>
</query>
<query connection-id="out2">
INSERT INTO AnotherTable (col1, col2)
VALUES (${etl.globals['OUT1']}, ${etl.globals['OUT2']});
</query>
</query>
ERROR1 - Scriptella は「CALL FOO(SomeColumn, @OUT1, @OUT2);」という行を想定しています。結果セットを返します。
ドライバー例外: java.sql.SQLException: ResultSet は UPDATE からのものです。データなし。** SQL ストアド プロシージャの末尾に "SELECT 1" を追加すると、値が返され、このエラーが解消されます。
ERROR2 - 上記のコードは、OUT パラメータを一時的な SQL 変数として格納しようとしていますが、これは Scriptella では機能しません。
ドライバー例外: org.apache.commons.jexl2.JexlException: scriptella.driver.jexl.JexlConnection.run@80 トークン化に失敗しました
** ここでの @ 記号や一時変数の使用は好きではありません。
質問 Scriptella は、ストアド プロシージャの呼び出しと OUT パラメータの返しをサポートしていますか? 私はこれに対して多くの回避策/ハックを試みましたが、今日まで進歩していません.