在Oracle Reports 10g中使用整个select语句作为词法参数

时间:2015-02-12 09:30:43

标签: sql xml oracle oraclereports

我创建了一个词法参数x_sql,其数据类型为字符,初始值在用户参数部分为双。

sql语句是: - select * from(& x_sql)

现在,x_sql的值是从包含的函数中获取的,该函数在Before Report触发器中调用。

x_sql包含查询:

SELECT   process          
, part_name                   
, ok_qty               
, "Casting damage"
FROM INHOUSE_REJ_TAB
PIVOT (
  SUM(reason_wise_rej_qty) FOR rejected_reason IN (
    'Casting damage' as "Casting damage"
  )
) ORDER BY part_name

其中process,part_name和ok_qty是固定列,但Casting damage是动态的。可以有多个拒绝原因。

现在我需要从这个动态选择查询生成一个xml输出。

查询的输出是

PROCESS         PART_NAME                       OK_QTY  Casting Damage
LPC     PEGEOUT 1.8 CYLINDER HEAD CASTING H29   12420   10

问题是我没有得到所需的输出。

运行报告后得到的输出是: -

<?xml version="1.0" encoding="UTF-8" ?> 
- <!--  Generated by Oracle Reports version 10.1.2.3.0 
  --> 
- <INHOUSE_REJ>
- <LIST_G_DUMMY>
- <G_DUMMY>
  <DUMMY>X</DUMMY> 
  </G_DUMMY>
  </LIST_G_DUMMY>
  </INHOUSE_REJ>

所需的输出应为

<INHOUSE_REJ>
  <P_ORGANIZATION_ID>88</P_ORGANIZATION_ID>
  <P_FROM_DATE>2015-01-01</P_FROM_DATE>
  <P_TO_DATE>2015-02-11</P_TO_DATE>
- <LIST_G_DATA>
- <G_DATA>
  <PROCESS>LPC</PROCESS>
  <PART_NAME>PEGEOUT 1.8 CYLINDER HEAD CASTING H29</PART_NAME>
  <OK_QTY>12420</OK_QTY>
  <CASTING DAMAGE>10< /CASTING DAMAGE>
  </G_DATA>
  </LIST_G_DATA>
  </INHOUSE_REJ
  

P_ORGANIZATION_ID,P_FROM_DATE,P_TO_DATE是用户参数

我只需要知道一个词法参数是否包含一个完整的select语句,它在名称和要显示的列数方面都是动态的,然后是如何在Oracle Reports 10g中处理它。

请帮助我并指导我。

1 个答案:

答案 0 :(得分:0)

词法引用是嵌入SELECT语句的文本的占位符。您可以使用词法引用来替换SELECT,FROM,WHERE,GROUP BY,ORDER BY,HAVING,CONNECT BY和START WITH之后出现的子句。您不能在PL / SQL中进行词法引用。在查询中引用词法参数之前,必须预先定义参数。

语法: SELECT Col1,Col2 FROM&amp; ATABLE

      Lexical parameters are used to substitute multiple values at run time and identified by a preceding ‘&’. Lexical can consist of as little a one line where clause to an entire select statement

使用词法参数创建Oracle报告 http://www.oraappdata.com/2017/02/create-oracle-report-with-lexical-parameter.html