문제
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 **?**
질문에서, 그러나 처음에는 유효한 스키마를 사용하면 설계 단계에 메타 데이터 세트를 사용할 수 있습니다.