Jump to content

Vinicius Dezem

Members
  • Content count

    3
  • Joined

  • Last visited

Community Reputation

0 Comum

About Vinicius Dezem

  1. Vinicius Dezem

    Controle de Transações

    Bom dia pessoa, Tenho dois sistemas que acessam uma tabela, porem quando o sistema A está processando a tabela, o sistema B acusa de arquivo lockado. Pois ele não consegue fazer nenhum DML por causa do controle de transações. Porem nesta tabela não preciso manter uma consistência dos dados a esse nível, existe a possibilidade de retirar o controle de transações do Oracle ? e de uma única tabela ? Obrigado
  2. Vinicius Dezem

    IF se existe na tabela

    Bom dia Motta, obrigado pela resposta vou ver com o metodo que você falou. Eu "consegui" fazer mas com um cursor .. porem chega uma hora que ele se embaralha e a tabela fica enorme. Trigger criada : ela alimenta o que foi inserido na tabela controle para a tabela controle_aux, porem apenas se ela atender as condições do IF : create or replace trigger titular after insert or update on telessvr.controle for each row declare --v_titular integer; CURSOR c_titular IS select titular from controle_aux where titular is not null; /* DECLARANDO A VARIAVEL QUE RECEBERÁ OS REGISTROS DA TABELA */ r_tit char(12); begin /*ABRE CURSOR*/ OPEN c_titular; LOOP /*LÊ UM REGISTRO DO CURSOR*/ FETCH c_titular into r_tit; /* SAI DO LOOP CASO SEJA O FINAL DO CURSOR */ IF (:new.tpfis = 6 or :new.icard IN (r_tit)) then insert into telessvr.controle_aux values (:new.icard, :new.titular, :new.grupo, :new.grupo1, :new.grupo2, :new.grupo3, :new.grupo_sab, :new.grupo_dom, :new.grupo_fer); end if; EXIT WHEN c_titular%NOTFOUND; END LOOP; /* FECHA O CURSOR */ CLOSE C_titular; END; SE eu tentar fazer uma trigger para atualizar a controle de volta, irá dar erro de tabela mutante, resolvi criar uma procedure que irá rodar a cada alguns segundos "interval : (sysdate)+0,05/(1440)" .. CREATE OR REPLACE PROCEDURE SP_PERMPROVISORIO IS vicard telessvr.controle.icard%type; vtitular telessvr.controle.titular%type; vgrupo telessvr.controle.grupo%type; vgrupo1 telessvr.controle.grupo1%type; vgrupo2 telessvr.controle.grupo2%type; vgrupo3 telessvr.controle.grupo3%type; vgrupo_sab telessvr.controle.grupo_sab%type; vgrupo_dom telessvr.controle.grupo_dom%type; vgrupo_fer telessvr.controle.grupo_fer%type; vcontador integer; BEGIN SELECT COUNT(*) INTO VCONTADOR FROM CONTROLE_AUX; dbms_output.put_line('CONTADOR: ' || vcontador); dbms_output.put_line('vicard : ' || vicard); dbms_output.put_line('vtitular : ' || vtitular); dbms_output.put_line('vgrupo : ' || vgrupo); dbms_output.put_line('vgrupo1 : ' || vgrupo1); dbms_output.put_line('vgrupo2 : ' || vgrupo2); dbms_output.put_line('vgrupo3 : ' || vgrupo3); dbms_output.put_line('vgrupo_sab : ' || vgrupo_sab); dbms_output.put_line('vgrupo_dom : ' || vgrupo_dom); dbms_output.put_line('vgrupo_fer : ' || vgrupo_fer); IF(vcontador > 0) then SELECT A.ICARD, B.ICARD, B.GRUPO, B.GRUPO1, B.GRUPO2, B.GRUPO3, B.GRUPO_SAB, B.GRUPO_DOM, B.GRUPO_FER INTO vicard, vtitular, vgrupo, vgrupo1, vgrupo2, vgrupo3, vgrupo_sab, vgrupo_dom, vgrupo_fer FROM TELESSVR.CONTROLE_AUX A INNER JOIN CONTROLE_AUX B ON A.TITULAR = B.ICARD WHERE ROWNUM = 1; END IF; UPDATE CONTROLE SET grupo = vgrupo, grupo1 = vgrupo1, grupo2 = vgrupo2, grupo3 = vgrupo3, grupo_sab = vgrupo_sab, grupo_dom = vgrupo_dom, grupo_fer = vgrupo_fer WHERE ICARD = VICARD; COMMIT; DELETE FROM CONTROLE_AUX WHERE ICARD= VICARD OR icard = vtitular; COMMIT; END; Quando é inserido na controle as outras trigger atualizam duas vezes nela que gera 2 registros na controle_aux: (3 por causa desse if, não sei o porque) Eu preciso atualizar o ICARD na controle os valores das colunas grupos do numero vinculado pelo TITULAR (onde é igual do icard da segunda linha), para que os dois fiquem iguais. Desse forma que eu fiz, onde eu errei ? ou esse realmente não é um método recomendado ? Obrigado
  3. Vinicius Dezem

    IF se existe na tabela

    Boa tarde pessoa, Estou com o seguinte problema : Tenho uma trigger com IF e nele preciso verificar se o new.campo existe em outra tabela para executar o insert Da seguinte forma : IF( :new.tpfis=6 or :new.icard in (select titular from controle_aux))then insert into telessvr.controle_aux values (:new.icard, :new.titular, :new.grupo, :new.grupo1, :new.grupo2, :new.grupo3, :new.grupo_sab, :new.grupo_dom, :new.grupo_fer); end if; Porem sei que dessa forma não é possível fazer, como poderia estar fazendo esta checagem ? Procurei por cursor ou array, porem não consegui entender muito bem como funciona. Obrigado desde já.
×

Important Information

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