سؤال

هل من الممكن لجعل اسم مخطط ديناميكية في استعلام 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

ولكن؟ يبدو فقط للعمل من أجل شرط مكان.

وأحتاج لتمرير المخطط باعتباره المعلمة واستخدام حيوي لأنه يتغير على أساس ديف / القط / همز

وليس هناك طريقة ما لgenereate مزود أووتسيتي من أكس بيرت وحقنه بطريقة أو بأخرى؟

وفعلت بعض مزيد من البحث حول هذا الموضوع وجدت هذا الحل

<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" + "FROM" + بارامس [ "المخطط"] + ". COBOL_CALENDAR" +

وإضافة مساحة أمام من أنها ثابتة.

رأس

والانفجارات على شاشة LCD.

نصائح أخرى

ويبدو الخاص بتحرير 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" وأدخل ccript بديل:

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

وبهذه الطريقة يمكنك استبدال dev سلسلة في نص الاستعلام الخاص بك مع قيمة SCHEMA الخاص معلمة بك قبل تنفيذ الاستعلام. هل يمكن استبدال كل سلسلة تريد (**?** ينكه من سؤالك، ولكن مع مخطط صالح في المقام الأول يمكنك استخدامها بين مجموعة البيانات الفوقية وللمرحلة التصميم.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top