문제

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

나는 이것을 시도했다 :

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 절에 대해서만 작동하는 것 같습니다.

스키마를 매개 변수로 전달하고 dev/cat/prod를 기반으로 변경되므로 동적으로 사용해야합니다.

Birt XML의 SQL 외부 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>

그러나이 문제에 대한 몇 가지 예제에 관계없이 이러한 방식으로 SQL을 주입하면 다음 오류 만 생성됩니다.

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") 동일한 결과로 경로.

도움이 되었습니까?

해결책

Arrrgh는 공간의 멍청한 문제였다 !!

"end) as dayofweek"+"에서"+params [ "schema"]+". cobol_calendar"+

From the From From Pohent It의 공간을 추가합니다.

LCD 디스플레이에서 앞머리 헤드.

다른 팁

보고서의 XML 소스를 편집 한 것 같습니다. 다음은 SQL-Query에서 임의의 문자열을 대체하는보다 그래픽적인 방법입니다.

다음과 같이 쿼리를 작성하십시오.

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

만약에 dev 메타 데이터 세트를 선택할 수있는 유효한 스키마입니다. 여전히 보고서 매개 변수로 대체 할 수 있습니다.

다음으로 데이터 세트를 클릭하고 "스크립트"탭을 선택하십시오. 여기에서 "Offecten Open"을 선택하고 교체 CRIPTE를 입력합니다.

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

이렇게하면 문자열을 교체합니다 dev 귀하의 값이있는 쿼리 텍스트에서 SCHEMA 쿼리를 실행하기 전에 매개 변수. 원하는 모든 문자열 (Linke **?** 질문에서, 그러나 처음에는 유효한 스키마를 사용하면 설계 단계에 메타 데이터 세트를 사용할 수 있습니다.enter image description here

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top