Sql 如何确保报表中的值大于0
我有一个员工计数器,当对员工提出投诉时,该计数器将减少1 每位员工从10个代币开始 我在投诉页面上做了一个处理,当创建投诉时,令牌计数减少1 我的数据库中有一个表,其中包含员工id和他们的令牌计数 此表显示在apex上的交互式报告中 问题是,即使雇员的象征性计数为0,雇主仍然可以对他们提出投诉Sql 如何确保报表中的值大于0,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,我有一个员工计数器,当对员工提出投诉时,该计数器将减少1 每位员工从10个代币开始 我在投诉页面上做了一个处理,当创建投诉时,令牌计数减少1 我的数据库中有一个表,其中包含员工id和他们的令牌计数 此表显示在apex上的交互式报告中 问题是,即使雇员的象征性计数为0,雇主仍然可以对他们提出投诉 我希望投诉创建表单中显示一个错误,阻止他们投诉,直到该员工拥有超过0个代币。因此,当雇主试图提交投诉表时,会出现一个错误如果你要求在报告中始终显示一个零或更大的数字,那么你可以使用最大标记0: Oracl
我希望投诉创建表单中显示一个错误,阻止他们投诉,直到该员工拥有超过0个代币。因此,当雇主试图提交投诉表时,会出现一个错误如果你要求在报告中始终显示一个零或更大的数字,那么你可以使用最大标记0: Oracle安装程序: 查询: 输出:
dbfiddle我认为,事实上,在提交投诉时,您最好得到确认。
当提出投诉时,进行验证运行,检查员工是否有代币,如果他的代币是正确的,请给出一个示例,包括您到目前为止拥有的源代码和错误所在的示例。如果您只想在报告中始终显示零或更多,那么您可以在查询中使用最大标记0,但如果您想在适当的位置生成错误,那么您需要在问题中提供更多信息。在我看来,您应该更改您的业务逻辑。让雇主投诉,不要阻止他们。您可以使用负令牌计数,或者当令牌计数为0的员工收到投诉时,只保留令牌计数=0不更新令牌计数,而不是令牌计数-=1。
CREATE TABLE tokens ( id, token ) AS
SELECT 1, 10 FROM DUAL UNION ALL
SELECT 2, 3 FROM DUAL UNION ALL
SELECT 3, 0 FROM DUAL UNION ALL
SELECT 4, -1 FROM DUAL UNION ALL
SELECT 5, -9 FROM DUAL;
SELECT id,
GREATEST( token, 0 ) AS token
FROM tokens;
ID | TOKEN
-: | ----:
1 | 10
2 | 3
3 | 0
4 | 0
5 | 0
DECLARE
s_tokens NUMBER;
b BOOLEAN;
BEGIN
BEGIN
SELECT token_count
INTO s_tokens
FROM token_table
WHERE employee_id = :EMPLOYEE_ID -- taken from the active complaint form
IF s_tokens <= 0 THEN
b := FALSE;
ELSE
b := TRUE;
END IF;
EXCEPTION
WHEN others THEN -- to catch if the employee is not in the table or if anything else messes up
b := FALSE;
END;
RETURN b;
END;