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

时间:2019-03-29 08:51:14

标签: sql oracle oracle-apex

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

每个员工都以10个令牌开头。

我在投诉页面上进行了处理,以便在创建投诉时,令牌计数减少1。

我的数据库中有一个表,其中有employee_id及其token count

此表显示在顶点交互式报告中。

问题在于,即使雇员的代币计数为0,雇主仍然可以对其进行投诉。

我要会在投诉创建表单中显示错误,阻止他们提出投诉,直到该员工拥有超过0个令牌为止。 (因此,当雇主试图提交投诉表时,就会出现错误)

2 个答案:

答案 0 :(得分:0)

如果您要求始终在报告中显示零或更大的数字,则可以使用 /** * @ORM\Column(type="decimal", precision=3, scale=2) */ private $contenance; /** * @ORM\Column(type="decimal", precision=3, scale=2) */ private $prix;

Oracle设置

<?php

namespace App\Admin;

use Sonata\AdminBundle\Admin\AbstractAdmin;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\MoneyType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;

final class ProduitAdmin extends AbstractAdmin
{
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper->add('titre', TextType::class);
        $formMapper->add('millesime', TextType::class);
        $formMapper->add('cepage', TextType::class);
        $formMapper->add('appellation', TextType::class);
        $formMapper->add('description', TextType::class);
        $formMapper->add('contenance', NumberType::class, ['scale' => 3]);
        $formMapper->add('prix', MoneyType::class, ['scale' => 3]);
        $formMapper->add('classe', TextType::class);
    }

查询

GREATEST( token, 0 )

输出

ID | TOKEN
-: | ----:
 1 |    10
 2 |     3
 3 |     0
 4 |     0
 5 |     0

db <>提琴here

答案 1 :(得分:0)

我认为,实际上,提交投诉后最好为您提供服务。 投诉后,进行验证运行,检查员工是否有代币,如果他的代币<= 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;

这是一个非常基本的验证,您可以对其进行很多改进,但对于初学者来说应该可以使用。 设置验证以执行返回布尔值的plsql代码,然后可以将错误文本更改为所需的任何内容。