使用SQL函数创建SQL查询时出现Apex分析错误
我有以下功能:使用SQL函数创建SQL查询时出现Apex分析错误,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,我有以下功能: CREATE OR REPLACE FUNCTION calc_a(BIDoctor number) RETURN number IS num_a number; BEGIN select count(NAppoint) into num_a from Appointment a where BIDoctor = a.BIDoctor; RETURN num_a; END calc_a; 我们想要的是在报告中添加一列,显示doc的预约次数 select
CREATE OR REPLACE FUNCTION calc_a(BIDoctor number) RETURN number
IS
num_a number;
BEGIN
select count(NAppoint)
into num_a
from Appointment a
where BIDoctor = a.BIDoctor;
RETURN num_a;
END calc_a;
我们想要的是在报告中添加一列,显示doc的预约次数
select a.BIdoctor "NUM_ALUNO",
a.NameP "Nome",
a.Address "Local",
a.Salary "salary",
a.Phone "phone",
a.NumberService "Curso",
c.BIdoctor "bi",
calc_media(a.BIdoctor) "consultas"
FROM "#OWNER#"."v_Doctor" a, "#OWNER#"."Appointment" c
WHERE a.BIdoctor = c.BIdoctor;
我们在apex上写区域源时得到了这个。
但它显示了一个解析错误,我找了大约2个小时,什么也没有
Apex向我展示了:
对以下查询的分析错误
这可能是因为你所有的双引号,你似乎已经随机案件的一切。双引号表示您正在使用带引号的标识符,即必须使用该确切名称创建对象/列-
“Hi”
与“Hi”
不同。从你的功能判断,去掉所有的双引号-你似乎不需要它们
一般来说,不要使用带引号的标识符。曾经他们制造的麻烦比他们的价值多得多。如果有必要的话,您将知道将来何时要使用它们
SELECT语句还有一些问题
- 您正在使用隐式联接。SQL-92中添加了显式连接;是时候开始使用它们了——在你未来的职业生涯中,如果没有其他东西,你可能会与其他RDBMS进行交互
- 绝对不需要你的功能;您可以使用
- 你的别名有点不可靠-为什么
指的是医生而a
指的是预约c
select d.bidoctor as num_aluno
, d.namep as nome
, d.address as local
, d.salary as salary
, d.phone as phone
, d.numberservice as curso
, a.bidoctor as bi
, count(nappoint) over (partition by a.bidoctor) as consultas
from #owner#.v_doctor a
join #owner#.appointment c
on d.bidoctor = a.bidoctor;
我在猜测appoint
和V_DOCTOR
的主键是什么,但我希望它们分别是NAPPOINT
和BIDOCTOR
顺便说一句,您的函数永远不会返回正确的结果,因为您没有限制查询中参数的范围;您只需计算
约会中的记录数
。当您将参数命名为与表中的列相同的参数时,您必须在编写的任何查询中明确限制参数的作用域,例如:
select count(nappoint) into num_a
from appointment a
where calc_a.bidoctor = a.bidoctor; -- HERE
别害羞。编辑您的问题,并包括您得到的错误。calc_a和calc_media是否具有相同的功能?是的,我在这方面有一个错误。更正后出现:无法解析查询,请检查查询的语法。(ORA-00942:表或视图不存在)顺便说一句,我有一个v_医生视图。它无法分析,因为字符无效。我试着选择d.bidoctor作为num_aluno,d.namep作为nome,d.address作为local,d.salary作为salary,d.phone作为phone,d.numberservice作为curso,c.bidoctor作为bi,count(nappoint)over(由c.bidoctor分割)作为来自#owner#的顾问。v#医生d加入#owner#。预约c on d.bidoctor=c.bidoctor;它仍然会给错误提供无效字符