首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Scriptella和(mysql)存储过程"OUT“参数

Scriptella和(mysql)存储过程"OUT“参数
EN

Stack Overflow用户
提问于 2013-12-03 04:23:47
回答 1查看 777关注 0票数 1

我对scriptella很陌生,到目前为止我发现它非常有用,但是遇到了下面的障碍。我有一个SQL过程,它已经存在于MYSQL数据库中,类似于下面的内容。

代码语言:javascript
复制
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内部调用/调用这个过程,类似于以下内容:

代码语言:javascript
复制
    <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标记化失败

**这里不喜欢@符号或临时变量的使用。

问题支持调用存储过程和返回参数吗?我已经尝试过一些解决方案,但是到目前为止还没有取得任何进展。

EN

回答 1

Stack Overflow用户

发布于 2014-11-04 00:09:56

下面的脚本对我适用于mysql:

代码语言:javascript
复制
<!--
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>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20342856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档