2009-03-02 5 views
1

BIRT 쿼리에서 스키마 이름을 동적으로 만들 수 있습니까? BIRT 2.2 동적 스키마 이름

나는이 시도 :

SELECT CURRENT DATE AS DATE, 
(CASE WHEN DAYOFWEEK(CURRENT DATE) = 1 THEN 'SUNDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 2 THEN 'MONDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 3 THEN 'TUESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 4 THEN 'WEDNESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 5 THEN 'THURSDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 6 THEN 'FRIDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 7 THEN 'SATURDAY' 
     END) AS DAYOFWEEK 
FROM **?**.COBOL_CALENDAR 
WHERE SERVICE_DATE = CURRENT DATE" 

이 다음과 같은 오류 발생 :

ReportDesign (id = 1): 
+ Cannot get the result set metadata. 
SQL statement does not return a ResultSet object. 
SQL error #1: [IBM][CLI Driver][DB2] SQL0104N An unexpected token "?" was found following "". Expected tokens may include: "(TABLE FINAL <IDENTIFIER> XMLTABLE". SQLSTATE=42601 

그러나 다음 항목에 오류가 을?을 where 절에서만 작동하는 것 같습니다. BIRT의 XML의 outsite SQL을 genereate 어떻게 든 그것을 삽입 할 수있는 방법은

나는 PARAM으로 스키마를 통과하고이 dev에/고양이/자극

에 따라 변경되기 때문에 동적으로 사용할 필요가

이 없다?

나는 주제에 대한 검색을 좀 더했고, 그러나 상관없이 단지 다음과 같은 오류를 생성하는 방법 많은 예제 이러한 방식으로 SQL 주입이 문제에 나가있다가이 솔루션

<method name="beforeOpen"><![CDATA[this.queryText = "SELECT CURRENT DATE AS DATE, "+ 
"(CASE WHEN DAYOFWEEK(CURRENT DATE) = 1 THEN 'SUNDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 2 THEN 'MONDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 3 THEN 'TUESDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 4 THEN 'WEDNESDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 5 THEN 'THURSDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 6 THEN 'FRIDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 7 THEN 'SATURDAY'"+ 
"  END) AS DAYOFWEEK"+ 
"FROM "+params["SCHEMA"]+".COBOL_CALENDAR"+ 
" WHERE SERVICE_DATE = CURRENT DATE";]]></method> 

을 발견했다.

ReportDesign (id = 1): 
+ Cannot get the result set metadata. 
SQL statement does not return a ResultSet object. 
SQL error #1: [IBM][CLI Driver][DB2] SQL0104N An unexpected token "SCHEMANAME" was found following "". Expected tokens may include: ", FROM INTO". SQLSTATE=42601 

심지어 같은 결과로 reportContext.getParameterValue("SCHEMANAME") 경로를 시도했습니다.

답변

2

ARRRGH 공간이있는 어리석은 문제였습니다! 앞의 공간을 추가 + PARAMS [ "SCHEMA"] "FROM"

"DAYOFWEEK AS END)"+ + ". COBOL_CALENDAR"+

는 IT 개의 고정.

lcd 디스플레이에 앞머리 머리.

0

보고서의 XML 소스를 편집 한 것처럼 보입니다. dev 당신이 지금 선택할 수있는 유효한 스키마 인 경우

SELECT CURRENT DATE AS DATE, 
(CASE WHEN DAYOFWEEK(CURRENT DATE) = 1 THEN 'SUNDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 2 THEN 'MONDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 3 THEN 'TUESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 4 THEN 'WEDNESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 5 THEN 'THURSDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 6 THEN 'FRIDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 7 THEN 'SATURDAY' 
     END) AS DAYOFWEEK 
FROM dev.COBOL_CALENDAR 
WHERE SERVICE_DATE = CURRENT DATE 

: 다음과 같은

당신 조회를 작성 : 여기에 귀하의 SQL-쿼리에서 임의의 문자열의 교체를하고 좀 더 그래픽 방법입니다 메타 데이터 집합은 여전히 ​​보고서 매개 변수로 대체 할 수 있습니다.

다음으로 데이터 세트를 클릭하고 "스크립트"탭을 선택하십시오. 당신이 당신의 실행 쿼리 전에 SCHEMA 매개 변수의 값으로 쿼리 텍스트 문자열 dev을 대체

this.queryText = this.queryText.replace("dev", params["SCHEMA"].value); 

이 방법 : 여기 당신은 "beforeOpen"를 선택하고 교체 ccript를 입력합니다. 원하는 모든 문자열을 대체 할 수는 있지만 (linke **?** 질문에 있지만 올바른 스키마를 사용하면 디자인 단계에서 메타 데이터 집합을 사용할 수 있습니다.) enter image description here