1

次のような状況があります。フロー変数destTableにテーブルの名前があり、それを単純なクエリに入れたいと考えています。

SELECT * FROM #[destTable]

テーブルが存在し、queryを呼び出すユーザーがそのテーブルにアクセスでき、変数の名前が正しく、String型であると確信しています。テーブルの名前を明示的に指定すると、すべて正常に機能するためです。私が得るエラーは次のとおりです。

Root Exception stack trace:
java.sql.SQLSyntaxErrorException: ORA-00903: invalid table name
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:457)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:400)
    at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:926)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

エラーは名前が無効であることを示していますが、私が言ったように、名前(T_ORG)にスペースや印刷できない文字が含まれていないことをロガーなどで確認しました。何が欠けているのか、何が間違っているのか、それともMuleソフトウェア自体に問題があるのでしょうか?

追加情報1:「#[]」のないクエリには、構文の色(ほとんどが茶色と黒)があります。ただし、FROM句の後に#[]を付けると、コメントであるかのように、または他の方法で無視されるように、それ以降のすべてが水色になります。これが問題の特定に役立つことを願っています。

追加情報2:エラーを再現するためのサンプル構成(Oracle XEなどを使用している場合):

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:tracking="http://www.mulesoft.org/schema/mule/ee/tracking" xmlns:jms="http://www.mulesoft.org/schema/mule/jms" xmlns:http="http://www.mulesoft.org/schema/mule/http"
    xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml"
    xmlns:jdbc-ee="http://www.mulesoft.org/schema/mule/ee/jdbc" xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" version="EE-3.3.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd 
http://www.mulesoft.org/schema/mule/xml http://www.mulesoft.org/schema/mule/xml/current/mule-xml.xsd 
http://www.mulesoft.org/schema/mule/ee/jdbc http://www.mulesoft.org/schema/mule/ee/jdbc/current/mule-jdbc-ee.xsd 
http://www.mulesoft.org/schema/mule/jms http://www.mulesoft.org/schema/mule/jms/current/mule-jms.xsd 
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-current.xsd 
http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd 
http://www.mulesoft.org/schema/mule/ee/tracking http://www.mulesoft.org/schema/mule/ee/tracking/current/mule-tracking-ee.xsd ">
    <jdbc-ee:connector name="Database" dataSource-ref="cdf" validateConnections="true" queryTimeout="-1" pollingFrequency="0" doc:name="Database"/>
    <jdbc-ee:oracle-data-source name="cdf" user="CDF" password="CDF" url="jdbc:oracle:thin:@//localhost:1521/xe" transactionIsolation="UNSPECIFIED" doc:name="Oracle Data Source"/>

    <flow name="sampleFlow" doc:name="sampleFlow">
        <http:inbound-endpoint exchange-pattern="one-way" host="localhost" port="8082" doc:name="HTTP"/>
        <set-variable variableName="myVar" value="T_ORG" doc:name="Variable"/>
        <jdbc-ee:outbound-endpoint exchange-pattern="one-way" queryKey="selectAll" queryTimeout="-1" connector-ref="Database" doc:name="Database">
            <jdbc-ee:query key="selectAll" value="SELECT * FROM #[myVar]"/>
        </jdbc-ee:outbound-endpoint>
    </flow>
</mule>
4

3 に答える 3

3

動的にできるのは、クエリのパラメータのみです (つまり、Mule 式)。クエリ内でテーブルを動的にすることはできません。

于 2013-02-26T15:09:12.977 に答える
1

長い休止の後、私は偶然この主題に戻ってきました... 実際、クエリ全体を動的にすることができます (少なくとも Mule 3.3.2 以降)。ここで手がかりを見つけました: Mule での非常に動的な JDBC クエリ

ここにサンプルプロジェクトがあります(ローカルで実行されているActiveMQサーバーとローカルのOracle DBが必要です。または、コードを編集して機能させるだけです):

http://pastebin.com/PcPz2LZy

それが私を助けたように、それが誰かを助けることを願っています! :)

于 2013-04-08T12:01:50.783 に答える
0

名前を app.properties ファイルのプロパティとして定義してから使用しようとしましたか? <jdbc-ee:query key="selectAll" value="SELECT * FROM ${tableName}"/>「tableName」が app.properties ファイルで定義された値であるこのようなもの。

于 2015-12-21T06:49:28.917 に答える