从查询中处理空结果集

时间:2013-03-27 12:34:18

标签: scriptella

我有两个具有相同结构的数据库,我想比较数据库之间的记录。第二个数据库中的记录是从第一个数据库复制的,但复制过程有时不起作用,在一个表的第一个数据库中,我有比第二个数据库中的同一个表更多的记录。所以我想知道第一个数据库中哪些记录不存在于第二个数据库中。我尝试过类似的东西:

<etl>
<connection id="db1" driver="auto"
    url="jdbc:mysql://localhost:3306/db" user="user"
    password="xxx"
    classpath="C:/mysql-connector-java-5.1.20.jar" />
<connection id="db2" driver="auto"
    url="jdbc:mysql://localhost:3307/db" user="user"
    password="xxx"
    classpath="C:/mysql-connector-java-5.1.20.jar" />
<connection id="text" driver="text" />
<query connection-id="db1">
    SELECT * FROM table;
    <query connection-id="db2">
        SELECT * FROM table WHERE id = '$id';
        <script connection-id="text">
            sometext, $rownum
        </script>
    </query>
</query>
</etl>

问题是,当针对db2的查询结果为空时,脚本不会被执行。

如何解决这个问题?

此致 亚切克

2 个答案:

答案 0 :(得分:1)

您可以使用count来检查实际的记录数。在这种情况下,结果集将始终返回一行。例如:

<query connection-id="db1">
    SELECT * FROM table;
    <query connection-id="db2">
        SELECT count(id) as CNT FROM table WHERE id = ?id;
        <!-- The script is executed ONLY IF number of results is zero -->
        <script connection-id="text" if="CNT==0">
            No matching record for id $id
        </script>
    </query>
</query>

答案 1 :(得分:0)

可能他不需要if条件,因为他的问题是脚本没有被执行;)