查询未返回预期结果我错过的内容

时间:2017-04-06 17:46:38

标签: sql plsql oracle-apex

我有一个APEX 5.0 App,用于生成员工的名片。 我创建了一个名为(SELECT LIST)的页面和P1_EMPLOYEE页面项。它执行此DB查询以填充选择列表。

select 
    EMPLOYEE.LASTNAME||', '||EMPLOYEE.FIRSTNAME as FULLNAME,
    EMPLOYEE.SECTION AS SECTION
from 
    EMPLOYEE EMPLOYEE
ORDER BY 
    EMPLOYEE.LASTNAME asc;

当页面加载时,它会在选择列表中输入大约900个员工姓名(例如,Doe,John,Doe,Jane等)。

另外,我创建了一个名为(Create)的BUTTON,其动态操作设置为Execute Javascript(例如window.open( 'f?p=&APP_ID.:0:&SESSION.:PRINT_REPORT=CreateBizCards' );)。

上面的CreateBizCards是一个报表查询,我输入了

的SQL语法
select 
    EMPLOYEE.FIRSTNAME as "FIRST NAME",
    EMPLOYEE.LASTNAME as "LAST NAME",
    EMPLOYEE.TITLE as TITLE,
    EMPLOYEE.SECTION as SECTION,
    EMPLOYEE.OFFICE_PHONE as "OFFICE PHONE",
    EMPLOYEE.EMAIL as "E-MAIL"
from 
    EMPLOYEE EMPLOYEE
where 
    EMPLOYEE.LASTNAME = :P1_EMPLOYEE;

当触发(创建)BUTTON时,假设根据SELECT LIST中选择的员工姓名创建报告。

有两件事情正在发生,这些都是不受欢迎的结果。

首先,当触发“创建”按钮时,它将生成一个报告,其中包含具有相同姓氏的不同用户。

其次,如果我在触发按钮时更改了Report Query上的SQL查询,它会生成一个只包含列名而没有数据的PDF。

我应该如何为CreateBizCards报表查询编写查询,以便它从页面项上的SELECT LIST中找到所选员工(例如:P1_EMPLOYEE),然后仅返回特定于该员工的数据?

注意:我无法共享APEX URL,因为这是一个内部Application Server。

1 个答案:

答案 0 :(得分:1)

选择列表等是LOV期望1或2列的项目。第1列是显示值,第2列是返回值。

这就是“帮助”所说的将SQL查询用于值列表(直接从顶点5的帮助中复制)

  

输入SQL查询定义以填充此值列表。   通常,值查询列表的格式为:

select [displayValue],
       [returnValue]
  from ...
 where ...
 order by ...
     

所选的每列必须具有唯一的名称或别名。神谕   建议在包含SQL的任何列上使用别名   表达

     

<强>实施例

     

基于SQL查询的值列表

select ename as d, 
       empno as r
  from emp 
 order by 1
     

具有相同显示和返回值的值列表

select ename d,
       ename r 
  from emp 
 order by 1
     

注意:为显示和返回选择相同的列时   值使用列别名。

您的选择列表项(P1_EMPLOYEE)正在显示员工LASTNAMEFIRSTNAME的串联。该项目正在返回(=引用其会话状态时的值)员工的SECTION,我认为该员工不是员工的姓氏或是唯一的密钥。

这意味着您的报告查询有一个where子句,主要是说“返回LASTNAME等于SECTIONP1_EMPLOYEE)的记录。

我建议您将P1_ITEM设置为:

Select e.lastname||', '||e.firstname as fullname,
[SOME UNIQUE ID] --replace with primary key
from employee e
order by e.lastname, e.firstname;

对于您的报告查询,您可能希望将where子句更改为以下内容:

where e.[SOME UNIQUE ID] = :P1_EMPLOYEE;