Имя динамической схемы BIRT 2.2

Можно ли сделать имя схемы динамическим в запросе 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

нет ли какого-нибудь способа сгенерировать sql за пределами birt xml и каким-то образом внедрить его ??

Я сделал еще несколько поисков по этому вопросу и нашел это решение

<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") с теми же результатами.


person branchgabriel    schedule 02.03.2009    source источник


Ответы (2)


АРРРР это была глупая проблема с пробелами!!

" END) AS DAYOFWEEK"+ "FROM "+params["SCHEMA"]+".COBOL_CALENDAR"+

Добавление пробела перед FROM исправило это.

стучит головой по ЖК-дисплею.

person branchgabriel    schedule 03.03.2009

Похоже, вы отредактировали XML-источник вашего отчета. Вот более графический способ замены произвольной строки в вашем SQL-запросе:

Напишите свой запрос следующим образом:

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 является допустимой схемой, теперь вы можете выбрать набор метаданных и по-прежнему можете заменить его параметром отчета.

Затем нажмите на свой набор данных и выберите вкладку «скрипт». Здесь вы выбираете «beforeOpen» и вводите заменяющий скрипт:

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

Таким образом, вы заменяете строку dev в тексте запроса значением параметра SCHEMA перед выполнением запроса. Вы можете заменить каждую строку, которую хотите (ссылка **?** из вашего вопроса, но с действительной схемой в первую очередь вы можете использовать набор метаданных для этапа проектирования. введите здесь описание изображения

person Simulant    schedule 01.04.2016