Ir para conteúdo

devenr

Members
  • Total de itens

    9
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre devenr

  1. devenr

    Validar campo para realizar update corretamente

    No caso, eu terei que criar um cursor para inserir o valor da variável no CONCIL? Não entendi esse: /*SE NULO INCLUI , SENAO CONCATENA*/ É alguma especie de IF no where?
  2. devenr

    Validar campo para realizar update corretamente

    Pois é... :( Sabe como solucionar esse problema?
  3. devenr

    Validar campo para realizar update corretamente

    E ai pessoal! Estou desenvolvendo uma procedure e estou com dificuldade para validar um campo. É seguinte, preciso verificar se o campo contem um registro, se contem, realiza o update concatenando com o registro de entrada e se não conter registro, apenas faça o update com o registro de entrada. Obs: Esse campo é separado por virgula. Segue o meu código: CREATE OR REPLACE PROCEDURE SP_VINCULO ( P_COD_MATRIZ IN TB_EDIEXT_PERFIL.COD_MATRIZ%TYPE, P_CONCIL IN TB_EDIEXT_PERFIL.CONCIL%TYPE, P_ID_MBX IN TB_EDIEXT_PERFIL_MBX.ID_MBX%TYPE, P_ID_CONCIL INT, P_DIR_DEST VARCHAR2, P_PROTOCOLO VARCHAR2 ) IS V_EC TB_EDIEXT_PERFIL.CONCIL%TYPE; V_REG_CONCIL NUMBER(1); V_CONCIL_EC VARCHAR(10); CONTEM_EC EXCEPTION; CONTEM_REG EXCEPTION; CURSOR VERIFICA_EC IS SELECT P_CONCIL FROM TB_EDIEXT_PERFIL WHERE CONCIL = 'EC'; CURSOR VERIFICA_CONCIL IS SELECT CONCIL FROM TB_EDIEXT_PERFIL WHERE CONCIL = 'EC'; BEGIN INSERT INTO TB_EDIEXT_PERFIL_MBX VALUES (PERFIL_MBX.nextval, (SELECT ID FROM TB_EDIEXT_PERFIL WHERE COD_MATRIZ = P_COD_MATRIZ), (SELECT ID FROM TB_EDIEXT_MBX WHERE MBX = 'MB'||P_CONCIL)); IF P_PROTOCOLO = 'SFTP' THEN INSERT INTO TB_EDIEXT_PERFIL_SFTP VALUES (PERFIL_SFTP.nextval, (SELECT ID FROM TB_EDIEXT_PERFIL WHERE COD_MATRIZ = P_COD_MATRIZ), P_ID_CONCIL, P_DIR_DEST); UPDATE TB_EDIEXT_PERFIL SET SFTP = 1 WHERE COD_MATRIZ = P_COD_MATRIZ; ELSE INSERT INTO TB_EDIEXT_PERFIL_CD VALUES (PERFIL_CD.nextval, (SELECT ID FROM TB_EDIEXT_PERFIL WHERE COD_MATRIZ = P_COD_MATRIZ), P_ID_CONCIL, P_DIR_DEST, NULL); UPDATE TB_EDIEXT_PERFIL SET CD = 1 WHERE COD_MATRIZ = P_COD_MATRIZ; END IF; OPEN VERIFICA_EC; FETCH VERIFICA_EC INTO V_EC; IF P_CONCIL = 'EC' THEN RAISE CONTEM_EC; END IF; SELECT CASE WHEN EXISTS ( SELECT CONCIL FROM TB_EDIEXT_PERFIL WHERE CONCIL LIKE P_CONCIL) THEN 1 ELSE 0 END AS VERIFICA_CONC INTO V_REG_CONCIL FROM DUAL; IF V_REG_CONCIL = 1 THEN RAISE CONTEM_REG; END IF; OPEN VERIFICA_CONCIL; FETCH VERIFICA_CONCIL INTO V_CONCIL_EC; -- NESTA ETAPA ESTOU VERIFICANDO SE O CAMPO É = 'EC', SE FOR ELE FAZ APENAS O UPDATE SUBSTITUINDO PARA O P_CONCIL DE ENTRADA IF V_CONCIL_EC = 'EC' THEN UPDATE TB_EDIEXT_PERFIL SET CONCIL = P_CONCIL WHERE COD_MATRIZ = P_COD_MATRIZ; -- AQUI DEVERIA FAZER O UPDATE CONCATENANDO O P_CONCIL, MAS NÃO ESTÁ FUNCIONANDO. ELSE UPDATE TB_EDIEXT_PERFIL SET CONCIL = (SELECT CONCIL FROM TB_EDIEXT_PERFIL WHERE COD_MATRIZ = P_COD_MATRIZ)||','||P_CONCIL WHERE COD_MATRIZ = P_COD_MATRIZ AND ROWNUM = 1; END IF; EXCEPTION WHEN CONTEM_EC THEN DBMS_OUTPUT.PUT_LINE('NÃO É PERMITIDO VINCULAR '||V_EC); WHEN CONTEM_REG THEN DBMS_OUTPUT.PUT_LINE('ERRO! A matriz ja possui vinculo com a conciliadora.'); CLOSE VERIFICA_EC; CLOSE VERIFICA_CONCIL; END; / O que está ocorrendo é o seguinte, ele está substituindo o campo CONCIL sempre com o parâmetro de entrada P_CONCIL e a concatenação não está funcionando. Alguém sabe o porque? Obrigado desde já!
  4. devenr

    [Resolvido] Ajuda com procedure plsql

    Deu certo Motta! agradeço a ajuda Deu certo Motta! Agradeço a ajuda!
  5. devenr

    [Resolvido] Ajuda com procedure plsql

    Obrigado Motta! ajustei o END IF correspondente a cada IF e consegui criar a procedure, no entanto, ao executar a procedure colocando os parâmetros do INSERT, não está inserindo corretamente, chega a compilar a proc mas consulto na tabela e não retorna os dados que foram inseridos. tem ideia do que pode ser?
  6. devenr

    [Resolvido] Ajuda com procedure plsql

    Erro(24,5): PLS-00103: Encontrado o símbolo "MAIORES" quando um dos seguintes símbolos era esperado: if
  7. devenr

    [Resolvido] Ajuda com procedure plsql

    Fiz algumas alterações porém continua o problema... CREATE OR REPLACE PROCEDURE MAIORES( p_numero1 INT, p_numero2 INT, p_numero3 INT ) IS v_aux TB_MAIORES.MAIOR%TYPE; BEGIN IF p_numero1 >= v_aux THEN v_aux := p_numero1; IF p_numero2 >= v_aux THEN v_aux := p_numero2; IF p_numero3 >= v_aux THEN v_aux := p_numero3; INSERT INTO TB_MAIORES (NUMERO1, NUMERO2, NUMERO3, MAIOR) VALUES (p_numero1, p_numero2, p_numero3, v_aux); END IF; END MAIORES; /
  8. devenr

    [Resolvido] Ajuda com procedure plsql

    desenvolvi assim: CREATE OR REPLACE PROCEDURE MAIOR(p_numero1 INT,p_numero2 INT,p_numero3 INT) ISDECLAREv_aux INT;BEGINv_aux := 0;IF p_numero1 >= v_aux THENv_aux := p_numero1;IF p_numero2 >= v_aux THENv_aux := p_numero2;IF p_numero2 >= v_aux THENv_aux := p_numero3;INSERT INTO TB_MAIORES(NUMERO1, NUMERO2, NUMERO3 ,MAIOR)VALUES(p_numero1, p_numero2, p_numero3, v_aux);END porém está me retornando esse erro: Line/Col: 6/1 PLS-00103: Encountered the symbol "DECLARE" when expecting one of the following: begin function pragma procedure subtype type <an identifier> <a double-quoted delimited-identifier> current cursor delete exists prior external language
  9. devenr

    [Resolvido] Ajuda com procedure plsql

    Estou com dificuldade na criação de uma procedure que receba três valores numéricos e insira um registro na tabela abaixo: TB_MAIORES NUMERO1 Primeiro valor NUMERO2 Segundo valor NUMERO3 Terceiro valor MAIOR Maior valor entre (NUMERO1, NUMERO2 e NUMERO3)
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.