我是 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 参数?我为此尝试了许多解决方法/技巧,但迄今为止还没有取得任何进展。