为什么函数调用没有产生结果



我创建了一个包含函数和过程的包。

CREATE OR REPLACE PACKAGE BODY test_action AS
FUNCTION count_positive (sub NVARCHAR2)
RETURN INTEGER
AS
BEGIN 
count_student := 0;
subj := sub;
SELECT COUNT(*) 
INTO count_student 
FROM D8_EXAMS E JOIN D8_SUBJECT S ON E.subj_id = S.subj_id
WHERE E.mark > 3 
AND S.subj_name = sub
GROUP BY S.subj_name;
number_requests();          
return count_student;
END count_positive; 
PROCEDURE number_requests AS
BEGIN
INSERT INTO package_table (subject,counts,callCount)
VALUES (subj,count_student,1);
exception
when dup_val_on_index then
update package_table 
set    callCount = callCount + 1,
counts = count_student
where  subject = subj;
COMMIt;
END number_requests;   
END test_action;

然后,我调用该函数并得到这样的结果:SELECT test_action.count_positive('ИНФОРМАТИКА') FROM DUAL;[![1]][1]如果您尝试在查询上执行相同的操作,那么结果是[![2]][2]

我使用的查询:

SELECT COUNT(*) 
FROM D8_EXAMS E JOIN D8_SUBJECT S ON E.subj_id = S.subj_id
WHERE E.mark > 3 
AND S.subj_name = 'ИНФОРМАТИКА'
GROUP BY S.subj_name;

怎么了?[1]: https://i.stack.imgur.com/tSPpr.png?[2]: https://i.stack.imgur.com/GuMCT.png?

尝试在sqlplus中运行该函数。如果查询给出了结果,函数也会这样做。

函数是返回结果的对象。在您的情况下,它返回一个数字,因此您可以在PLSQLSQL中使用它:

PLSQL

set serveroutput on  
declare
x pls_integer; 
begin
x := test_action.count_positive(sub => 'ИНФОРМАТИКА');
dbms_output.put_line(x);
exception 
when others then raise;
end;
/

/p>

select test_action.count_positive(sub => 'ИНФОРМАТИКА') from dual ;

最新更新