有没有办法查询表:P5_NS_ID指向?执行此查询时出错。
答案 0 :(得分:3)
@Frank Schmitt在他的解决方案中接近他的查询建议:
select "name" from (
select * from dns_servers where id = :P5_NS_ID)
where "type" = :P5_REC_TYPE_ID
要克服您遇到的错误,但需要提醒一下您尝试创建的Oracle APEX元素类型背后的规则,LIST OF VALUES QUERY
。这是Apex开发者区域中发布的基于查询的LOV示例的屏幕截图:
请注意,查询输出中需要有两列。位置1中的值是DISPLAY VALUE
(在使用它的选择对话框中显示的内容。)和RETURN VALUE
(实际返回的内容作为页面项的输入值,显示来自的选项)查询。
您可能在实现级联输入参数的逻辑时遇到一些困难。以下是如何弄清楚的例子。
以下是我的示例中使用的表结构:
<强> DEPT 强>
CREATE TABLE "DEPT"
( "DEPTNO" NUMBER(2,0),
"DNAME" VARCHAR2(14),
"LOC" VARCHAR2(13),
PRIMARY KEY ("DEPTNO") ENABLE
)
/
<强> EMP 强>
CREATE TABLE "EMP"
( "EMPNO" NUMBER(4,0) NOT NULL ENABLE,
"ENAME" VARCHAR2(10),
"JOB" VARCHAR2(9),
"MGR" NUMBER(4,0),
"HIREDATE" DATE,
"SAL" NUMBER(7,2),
"COMM" NUMBER(7,2),
"DEPTNO" NUMBER(2,0),
PRIMARY KEY ("EMPNO") ENABLE
)
/
ALTER TABLE "EMP" ADD FOREIGN KEY ("MGR")
REFERENCES "EMP" ("EMPNO") ENABLE
/
ALTER TABLE "EMP" ADD FOREIGN KEY ("DEPTNO")
REFERENCES "DEPT" ("DEPTNO") ENABLE
/
此示例将使用三个LOV查询:
第一个LOV查询位于页面项中:P3_FIRST_CHOICE
是独立的任何值。它为用户提供了DEPARTMENT
值的选择。
SELECT DNAME || ', ' || LOC as d, DEPTNO as r
FROM DEPT
第二个LOV查询位于页面项P3_SECOND_CHOICE
中,并依赖于P3_FIRST_CHOICE
选择的输入。
SELECT distinct JOB d, JOB r
FROM emp
WHERE emp.deptno = :P3_FIRST_CHOICE
这使P3_SECOND_CHOICE
成为第一个CASCADING PARAMETER
值,因此级联LOV父项为:P3_FIRST_CHOICE
。对于给定的部门,用户可以选择特定的JOB
。
请注意,即使返回值与显示相同,LOV查询输出也需要两列。
第三个LOV查询位于页面项P3_THIRD_CHOICE
中,并依赖于以下选项的输入:P3_FIRST_CHOICE
和P3_SECOND_CHOICE
。
SELECT ENAME d, EMPNO r
FROM emp
WHERE DEPTNO = :P3_FIRST_CHOICE
AND JOB = :P3_SECOND_CHOICE
P3_THIRD_CHOICE
具有CASCADING PARAMETER
依赖关系,并提供一系列员工姓名,这些员工姓名的记录与前两个表单选择项中的所选DEPARTMENT
和JOB
值相匹配。
有一个可选的第四个查询,用于填充从第三个LOV选择列表中选择的EMPLOYEE
的报告。
您的APEX表单设计可能如下所示:
这是示例查询表单:
第一个选择(部门)的条目选择:
第二次选择(工作)的条目选择:
第三选择(员工)的条目选择:
最终输出:所选员工的个人查询
答案 1 :(得分:1)
我不是APEX专家,但此查询看起来很糟糕 - 您从内部查询返回一个名为server_name
的列,并且您尝试引用两列在您的外部查询中调用"name"
和"type"
。
如果您的表格dns_servers
确实包含名为"name"
和"id"
的列,我建议您返回内部查询中的所有列:
select "name" from (
select * from dns_servers where id = :P5_NS_ID)
where "type" = :P5_REC_TYPE_ID