我正在創建一個包,但我不明白為什么會發生錯誤。我的包裹:
create or replace PACKAGE test_action AS
subj CHAR default '';
count_student INTEGER default 0;
FUNCTION count_positive(subject CHAR) RETURN INTEGER;
PROCEDURE number_requests;
END test_action;
包體:
CREATE OR REPLACE PACKAGE BODY test_action AS
FUNCTION count_positive(sub CHAR) 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 = subject
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 t
set callCount := callCount 1,
set counts := count_student
where subject = subj;
END number_requests;
END test_action;
然后我得到一個錯誤

如果我嘗試在函式描述之前為變數添加賦值,則會出現新錯誤

uj5u.com熱心網友回復:
因為 - 正如錯誤所說 - 您缺少等號(它只是=,不是:=),并且set每個僅一個關鍵字update:
update t
set callCount = callCount 1,
counts = count_student
where subject = subj;
除此之外:
- 包體中的函式宣告必須與包規范中的函式宣告相匹配
- 作為例外,您正在更新表
t;不應該是package_table嗎? select count(*)有group by條款;對我來說,它聞起來像是提出too_many_rows你沒有處理的錯誤
這至少可以編譯:包規范:
SQL> CREATE OR REPLACE PACKAGE test_action
2 AS
3 subj CHAR DEFAULT '';
4 count_student INTEGER DEFAULT 0;
5
6 FUNCTION count_positive (sub CHAR)
7 RETURN INTEGER;
8
9 PROCEDURE number_requests;
10 END test_action;
11 /
Package created.
包體:
SQL> CREATE OR REPLACE PACKAGE BODY test_action
2 AS
3 FUNCTION count_positive (sub CHAR)
4 RETURN INTEGER
5 AS
6 BEGIN
7 count_student := 0;
8 subj := sub;
9
10 SELECT COUNT (*)
11 INTO count_student
12 FROM D8_EXAMS E JOIN D8_SUBJECT S ON E.subj_id = S.subj_id
13 WHERE E.mark > 3
14 AND S.subj_name = sub
15 GROUP BY S.subj_name;
16
17 number_requests;
18 RETURN count_student;
19 END count_positive;
20
21 PROCEDURE number_requests
22 AS
23 BEGIN
24 INSERT INTO package_table (subject, counts, callCount)
25 VALUES (subj, count_student, 1);
26 EXCEPTION
27 WHEN DUP_VAL_ON_INDEX
28 THEN
29 UPDATE package_table
30 SET callCount = callCount 1, counts = count_student
31 WHERE subject = subj;
32 END number_requests;
33 END test_action;
34 /
Package body created.
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/338216.html
