我创建了一个包含函数和过程的包。
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
中运行该函数。如果查询给出了结果,函数也会这样做。
函数是返回结果的对象。在您的情况下,它返回一个数字,因此您可以在PLSQL
或SQL
中使用它:
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 ;