Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何确保报表中的值大于0_Sql_Oracle_Oracle Apex - Fatal编程技术网

Sql 如何确保报表中的值大于0

Sql 如何确保报表中的值大于0,sql,oracle,oracle-apex,Sql,Oracle,Oracle Apex,我有一个员工计数器,当对员工提出投诉时,该计数器将减少1 每位员工从10个代币开始 我在投诉页面上做了一个处理,当创建投诉时,令牌计数减少1 我的数据库中有一个表,其中包含员工id和他们的令牌计数 此表显示在apex上的交互式报告中 问题是,即使雇员的象征性计数为0,雇主仍然可以对他们提出投诉 我希望投诉创建表单中显示一个错误,阻止他们投诉,直到该员工拥有超过0个代币。因此,当雇主试图提交投诉表时,会出现一个错误如果你要求在报告中始终显示一个零或更大的数字,那么你可以使用最大标记0: Oracl

我有一个员工计数器,当对员工提出投诉时,该计数器将减少1

每位员工从10个代币开始

我在投诉页面上做了一个处理,当创建投诉时,令牌计数减少1

我的数据库中有一个表,其中包含员工id和他们的令牌计数

此表显示在apex上的交互式报告中

问题是,即使雇员的象征性计数为0,雇主仍然可以对他们提出投诉


我希望投诉创建表单中显示一个错误,阻止他们投诉,直到该员工拥有超过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;