Jump to content
pablwo

Erro ao Criar Trigger

Recommended Posts

CREATE TABLE FUNCIONARIO(
    MATRICULA	NUMBER PRIMARY KEY,
    NOME	VARCHAR2(100)
);

CREATE TABLE DEPENDENTE(
    CPF	VARCHAR2(14) PRIMARY KEY,
    NOME	VARCHAR2(100),
    MATRICULA_FUNCIONARIO	NUMBER,
    
    CONSTRAINT fk_dependente_matricula
    FOREIGN KEY (matricula_funcionario) 
    REFERENCES  FUNCIONARIO(matricula)
);

CREATE OR REPLACE TRIGGER QUANTIDADE_DE_DEPENDENTE
BEFORE INSERT OR UPDATE ON DEPENDENTE  
FOR EACH ROW 
BEGIN         
    IF:NEW.MATRICULA_FUNCIONARIO IN (SELECT MATRICULA_FUNCIONARIO FROM DEPENDENTE HAVING COUNT(MATRICULA_FUNCIONARIO) >= 3 GROUP BY MATRICULA_FUNCIONARIO) 
        THEN RAISE_APPLICATION_ERROR(-20000, 'Funcionario Excedeu a Quantidade de Dependentes');
    END IF;
END;
Boa noite, estou com dificuldades em criar triggers no sql oracle.
Minha dificuldade é criar um trigger que so permita que um funcionario tenha no maximo 3 dependetesacredito que o erro seja no select dentro do if, quando eu troco por valores como (1,2,3) esses valores servem como matriculas de funcionários que não é mais permitido adicionar dependentes.

Share this post


Link to post
Share on other sites

Tente isto mas talvez dê erro de "mutating table".

 

CREATE OR REPLACE TRIGGER QUANTIDADE_DE_DEPENDENTE
BEFORE INSERT OR UPDATE ON DEPENDENTE
FOR EACH ROW
DECLARE
  VN NUMBER;
BEGIN
  SELECT COUNT(MATRICULA_FUNCIONARIO)
  INTO VN
  FROM DEPENDENTE
  WHERE MATRICULA_FUNCIONARIO = :NEW.MATRICULA_FUNCIONARIO;
  IF VN >= 3 THEN
    RAISE_APPLICATION_ERROR(-20000, 'Funcionario Excedeu a Quantidade de Dependentes');
  END IF;
END;


 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By marco tulio sousa
      Boa tarde,
       
      FIz a declaração abaixo e tinha expectativa que o relatório retornado tivesse datas de inicio e termino de afastamento e ferias.
      Afastamentos estão em 1 tabela e férias em outra.
      Erro ORA-000936
      Que devo fazer?
       
       
      SELECT 
      SUBSTR(RHCGED_ALT_SIT_FUN.CODIGO, -6)
      Matric,
      RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL,
      CASE
       WHEN RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL = '1216' THEN 'ATESTADO'
       WHEN RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL = '1211' THEN 'INSS'
       WHEN RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL = '1220' THEN 'INSS'
       WHEN RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL = '1218' THEN 'MATERNID'
       WHEN RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL = '1118' THEN 'MATERNIDADE'
       WHEN RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL = '1318' THEN 'PATERNIDADE'
       WHEN RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL = '1210' THEN 'LIC REMUN'
      END TIPO_AFAST,
      TO_DATE(RHCGED_ALT_SIT_FUN.DATA_INIC_SITUACAO) DT_INIC_AFAST,
      TO_DATE(RHCGED_ALT_SIT_FUN.DATA_FIM_SITUACAO) DT_FIM_AFAST,
      TO_DATE(RHFERI_FERIAS.DT_INI_GOZO) DT_INIC_FERIAS,
      TO_DATE(RHFERI_FERIAS.DT_FIM_GOZO) DT_FIM_FERIAS
       
      FROM CRHH.RHCGED_ALT_SIT_FUN
      INNER JOIN CRHH.RHFERI_FERIAS ON RHCGED_ALT_SIT_FUN.CODIGO = RHFERI_FERIAS.CODIGO_CONTRATO

      WHERE 
      RHCGED_ALT_SIT_FUN.COD_SIT_FUNCIONAL In ('1216','1211','1220','1218','1118','1318','1210')
      AND
      CRHH.RHCGED_ALT_SIT_FUN.CODIGO >=lpad(:texto_1,15,'0')
      AND RHCGED_ALT_SIT_FUN.CODIGO  <=lpad(:texto_2,15,'0')
      ORDER BY RHCGED_ALT_SIT_FUN.DATA_INIC_SITUACAO DESC
    • By rafaelmoreira78
      Boa tarde!
      Estou querendo fazer um select a partir da seleção de um combobox. Nesse combobox o usuário escolhe o tipo de busca que ele quer. Se é por nome, por id, por data etc. E depois, exibe os dados nos campos. Porém, não estou conseguindo e não sei como resolver isso.
      public void consultar(){ String sql ="select * from tbcertificados where ?=?"; try{ pst=conexao.prepareStatement(sql); pst.setString(1,cbConsulta.getSelectedItem().toString()); pst.setString(2,txtBusca.getText()); rs=pst.executeQuery(); if (rs.next()){ lblID.setText(rs.getString(1)); txtNome.setText(rs.getString(2)); comboCursos.setSelectedItem(rs.getString(3)); txtData.setText(rs.getString(4)); txtCH.setText(rs.getString(5)); txtEmpresa.setText(rs.getString(6)); txtObs.setText(rs.getString(7)); }  
    • By asacap1000
      Galera me foi solicitado a criação de um servidor web, para disponibilizar serviços para os clientes. O que vocês recomendam?
      Tenho um servidor da DELL com windows 2016. Todo o desenvolvimento será em PHP, Javascript e companhia Ltda com conexão aos bancos de dados Mysql, SQL e ORACLE.
      Já temos um servidor que será desativado porém está utilizando uma versão muito antiga de PHP 5.4 e como base de instalação foi utilizado o WampServer. 
    • By Motta
      Envio de https via Oracle Versão
      Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production PL/SQL Release 12.2.0.1.0 - Production "CORE 12.2.0.1.0 Production" TNS for Linux: Version 12.2.0.1.0 - Production NLSRTL Version 12.2.0.1.0 - Production Obs 1) Wallet Instalado
      Obs 2) O problema não seria reproduzível por questões de segurança Obs 3) Já tentei com o fornecedor
      Tento enviar um POST via PLSQL e recebo o seguinte erro : Erro : ORA-24263: Certificate of the remote server does not match the target address.
      Pergunta Como posso saber o valor de req := utl_http.begin_request(url, 'POST',https_host =>'???????'); ? é obrigatório ?
      create or replace PROCEDURE "SMS_ENVIO2" (PNUMSMS IN VARCHAR2 , PTEXTO IN VARCHAR2 , PRETORNO OUT VARCHAR2) /*alguns dados ocultos*/ AS req utl_http.req; res utl_http.resp; url varchar2(4000) := 'https://messaging.o2c.cloud/api/v2/sms/';--acho que posso citar o site name varchar2(4000); buffer varchar2(4000); content varchar2(4000); VS_USUARIO VARCHAR2(11) := '*****'; VS_SENHA VARCHAR2(20) := '*****'; VS_SERIAL VARCHAR2(8);--VARCHAR2(100); VS_SCHEDULLE VARCHAR2(16) := TO_CHAR(SYSDATE,'DD/MM/YYYY HH24:MI'); VS_AUTHOR_64 VARCHAR2(20) := '*********'; begin UTL_HTTP.SET_WALLET('file:.....', '**********'); -- VS_SERIAL := LPAD(SMSENVIO_SERIAL_SEQ.NEXTVAL,8,'0'); content := ' { ' || ' "sendSmsRequest": {' || ' "to": "' || PNUMSMS ||'",' || ' "message": "' || PTEXTO || '",' || ' "id": "' || VS_SERIAL || ' }' || ' } '; -- dbms_output.put_line(url); dbms_output.put_line(content); -- --req := utl_http.begin_request(url,'POST'); req := utl_http.begin_request(url, 'POST',https_host =>'???????'); utl_http.set_header(req, 'Content-Type', 'application/json'); utl_http.set_header(req, 'Content-Length', length(content)); utl_http.set_header(req, 'Authorization', 'Basic ' || utl_encode.base64_encode(VS_AUTHOR_64)); -- utl_http.write_text(req, content); res := utl_http.get_response(req); begin loop utl_http.read_line(res, buffer); end loop; utl_http.end_response(res); exception when utl_http.end_of_body then utl_http.end_response(res); end; dbms_output.put_line('retorno ' || buffer); exception when others then PRETORNO := 'Erro : ' || UTL_HTTP.GET_DETAILED_SQLERRM; end;  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.