我对scriptella很陌生,到目前为止我发现它非常有用,但是遇到了下面的障碍。我有一个SQL过程,它已经存在于MYSQL数据库中,类似于下面的内容。
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)“返回一个resultSet。
驱动程序异常: java.sql.SQLException: ResultSet来自UPDATE。没有数据。**如果我将"SELECT 1“添加到SQL存储过程的末尾,它将返回一个值并消除此错误。
ERROR2 -上面的代码尝试将OUT参数存储为临时的SQL变量,这些变量在Scriptella中不工作。
驱动程序异常: org.apache.commons.jexl2.JexlException: scriptella.driver.jexl.JexlConnection.run@80标记化失败
**这里不喜欢@符号或临时变量的使用。
问题支持调用存储过程和返回参数吗?我已经尝试过一些解决方案,但是到目前为止还没有取得任何进展。
发布于 2014-11-04 00:09:56
下面的脚本对我适用于mysql:
<!--
Example of calling the following procedure:
CREATE PROCEDURE demoSp(IN inputParam VARCHAR(255),
INOUT inOutParam INT, OUT outParam VARCHAR(255))
BEGIN
DECLARE z INT;
SET z = inOutParam + 1;
SET inOutParam = z;
SET outParam = 'Out param';
SELECT inputParam;
END
//
-->
<!DOCTYPE etl SYSTEM "http://scriptella.javaforge.com/dtd/etl.dtd">
<etl>
<connection id="in" url="jdbc:mysql://localhost/test" user="root"/>
<connection id="out" driver="text"/>
<!-- Calling a stored procedure -->
<script connection-id="in">
CALL demoSp('abc3', @a, @b);
</script>
<!-- Using output parameters -->
<query connection-id="in">
select @a,@b;
<script connection-id="out">
$1,$2
</script>
</query>
<!-- Calling a stored procedure and iterating resultset (if any) -->
<query connection-id="in">
CALL demoSp('abc3', @a, @b);
<script connection-id="out">
Row: $1
</script>
</query>
</etl>https://stackoverflow.com/questions/20342856
复制相似问题