【发布时间】:2021-08-31 02:44:36
【问题描述】:
美好的一天, 我正在尝试创建一个触发器,该触发器应根据用户的工作类别(医生/其他)将用户总数检索为所有已注册用户的两个参数,因此我开发了:
CREATE OR REPLACE TRIGGER count_before_insert
BEFORE INSERT
ON REGISTRATION_FORM
FOR EACH ROW
DECLARE
p_current_doctor_number varchar2(20);
p_current_other_number varchar2(20);
p_ann_id number;
BEGIN
-- Count the existing trainees based on medical job category
SELECT COUNT(*) FROM REGISTRATION_FORM INTO p_current_doctor_number
WHERE JOB_CATEGORY = 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
-- Count the existing trainees based on other job category
SELECT COUNT(*) FROM TRN_LS_REGISTRATION_FORM INTO p_current_other_number
WHERE JOB_CATEGORY != 'Medic'
AND ANNOUCMENT_ID = p_ann_id;
但我收到以下错误:
Trigger COUNT_BEFORE_INSERT compiled
LINE/COL ERROR
--------- -------------------------------------------------------------
9/4 PL/SQL: SQL Statement ignored
9/50 PL/SQL: ORA-00933: SQL command not properly ended
14/4 PL/SQL: SQL Statement ignored
14/50 PL/SQL: ORA-00933: SQL command not properly ended
Errors: check compiler log
【问题讨论】:
-
您评论说您将使用触发器将数据选择到页面项目中。这可以工作,但这不是一个好的做法。我建议为此使用存储过程或函数。
-
@Koen Lostrie 感谢您的建议,我尝试使用 plsql 函数直接从源中检索数据,但遗憾的是页面项目并未有意识地更新,任何建议表示赞赏并再次感谢。
-
很难用这么少的信息给你建议。它应该始终使用 pl/sql 或 sql 作为源 - 如果您可以在 apex.oracle.com 上创建一个测试用例,或者创建一个关于此的新问题,我很乐意看看。应该避免触发 - 这将成为维护的噩梦,对于追随你的开发人员来说是一个完全的谜:)
标签: sql oracle plsql triggers oracle-apex