0

この単純なクエリによって入力されるAnalysisというレポートがあります。

SELECT * FROM TB_ANL analysis WHERE analysis.CD_ANL = $P{FILTER}

1つの要素のみが選択されます(CD_ANLは一意です)。

iReports(バージョン4.7)でこのクエリを編集すると、[クエリの編集]ウィンドウに実際にテーブルの列が表示され(テーブルが認識されるように)、レポートを正常にコンパイルできます。

サーバーで実行しようとすると、ORA-00942が非難され、次のように表示されます。

net.sf.jasperreports.engine.JRException: Error executing SQL statement for : AnalysisTemplate
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:229)
at net.sf.jasperreports.engine.fill.JRFillDataset.createQueryDatasource(JRFillDataset.java:758)
at net.sf.jasperreports.engine.fill.JRFillDataset.initDatasource(JRFillDataset.java:623)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1160)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:802)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:746)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247)
at gov.chesf.leilaovenda.nucleo.negocio.analise.RelatorioGerador.gerarRelatorio(RelatorioGerador.java:57)
at gov.chesf.leilaovenda.web.analise.analise.action.Index.gerarAnalise(Index.java:725)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)

...原因:java.sql.SQLException:ORA-00942:テーブルまたはビューが存在しません

at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288)
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:745)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:813)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1049)
at oracle.jdbc.driver.T4CPreparedStatement.executeMaybeDescribe(T4CPreparedStatement.java:854)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1154)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3370)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3415)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
at net.sf.jasperreports.engine.query.JRJdbcQueryExecuter.createDatasource(JRJdbcQueryExecuter.java:222)
... 85 more

したがって、基本的に問題は次のとおりです。iReportsとSQLDeveloperでテーブルを表示できますが、テーブルまたはビューが「存在しない」ため、レポートに入力できません。何が問題なのですか?ジャスパーがテーブルを見ることができない他の理由はありますか?

ここに投稿する前に私がしたこと:

  1. Jasperが使用しているユーザーを許可しました。

  2. はい、テーブルは存在します。

  3. Jasperで接続を確認しました。Hibernateが使用しているのと同じです。

4

1 に答える 1

0

問題が解決しました。

ここに問題がありました。それはiReport自体とは何の関係もありませんでしたが、接続がログインしているユーザーによって使用されているスキーマとは関係がありませんでした。

テーブルTB_ANLは、TB_ANLとしてだけでなく、OWNER.TB_ANLとして参照する必要があります。

これに対する可能な解決策:

1)TB_ANLを含むようにスキーマを更新します。2)OWNER.TB_ANLのシノニムをTB_ANLとして作成し、テーブルを参照するたびにOWNERのスキーマで検索されるようにします。

于 2013-01-30T13:40:55.387 に答える