Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''plsql''.

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Todas as áreas do Fórum

  • Q&A Desenvolvimento
    • Perguntas e respostas rápidas
  • Desenvolvimento Web
    • Desenvolvimento frontend
    • Javascript
    • PHP
    • Ruby
    • Python
    • Java
    • .NET
    • Docker, Kubernets e outros ambientes
    • Desenvolvimento com Wordpress
    • Desenvolvimento de apps
    • Desenvolvimento ágil
    • Desenvolvimento de Games
    • Banco de Dados
    • Design e UX
    • Algoritmos & Outras Tecnologias
  • Entretenimento e uso pessoal
    • Segurança & Malwares
    • Geral
    • Boteco iMasters

Encontrar resultados em...

Encontrar resultados que...


Data de Criação

  • Início

    FIM


Data de Atualização

  • Início

    FIM


Filtrar pelo número de...

Data de Registro

  • Início

    FIM


Grupo


Google+


Hangouts


Skype


Twitter


deviantART


Github


Flickr


LinkedIn


Pinterest


Facebook


Site Pessoal


Localização


Interesses

Encontrado 15 registros

  1. asacap1000

    Diferença entre Datas com dia, hora e minutos

    Salve galera estou com uma consulta, e preciso buscar a diferença entre datas, e em alguns casos são vários dias. Preciso que nesta consulta ele me retorne em dias, horas limitando a 23h minutos e segundos.. A consulta que fiz foi essa: abs(trunc((AK1.DATA_FINAL - AK1.DATA_INICIAL))) AS dias, abs(trunc(24 * (AK1.DATA_FINAL - AK1.DATA_INICIAL))) AS horas, abs(trunc((MOD(MOD(AK1.DATA_FINAL - AK1.DATA_INICIAL, 1) * 24, 1) * 60))) AS minutos, abs(trunc((MOD((MOD(MOD(AK1.DATA_FINAL - AK1.DATA_INICIAL, 1) * 24, 1) * 60), 1) * 60))) AS segundos, ou essa aqui LPAD(TRUNC(( (AK1.DATA_FINAL - AK1.DATA_INICIAL) * 86400 / 3600)), 3, '0') ||':' || LPAD(TRUNC(MOD( (AK1.DATA_FINAL - AK1.DATA_INICIAL) * 86400 , 3600 ) / 60 ), 2, '0') || ':'|| LPAD(TRUNC(MOD(MOD( (AK1.DATA_FINAL - AK1.DATA_INICIAL) * 86400, 3600 ), 60)), 2, '0') calculado, e nessa duas consultas ele me traz o total de horas o que complica. DIAS HORAS MINUTOS SEGUNDOS CALCULADO 0 6 1 10 006:01:11 0 0 31 28 000:31:28 0 1 5 8 001:05:09 0 0 41 2 000:41:02 0 4 59 53 004:59:53 0 0 41 6 000:41:06 0 4 59 20 004:59:20 0 0 56 1 000:56:01 0 0 26 31 000:26:31 0 6 10 3 006:10:03 0 0 40 1 000:40:01 0 4 59 53 004:59:53 0 6 3 27 006:03:27 0 6 3 7 006:03:07 0 1 5 57 001:05:58 10 250 28 21 250:28:21 10 250 18 37 250:18:37 0 4 58 42 004:58:43 Alguem poderia me dar uma força
  2. gcors88

    Gatilho com inserção simultânea

    Prezados, desenvolvi um gatilho onde este tem comunicação com outra tabela, uma é a coleta_sinal_vital, e onde o gatilho foi criado é na table itcoleta_sinal_vital ( esta possui uma fk da primeira), a questão é que dentro do gatilho realizo um select na primeira tabela para consultar o valor inserido em uma coluna da primeira tabela, faço essa consulta baseada nessa fk que esta sendo inserida ou seja where = :new.cd_coleta_sinal_vital, a questão é que no momento em que esse select é executado ele não retorna dado nenhum, acredito que isto ocorre porque a inserção em ambas as tabelas é feito de forma simultânea, pois se comparado posteriormente o valor da coluna sempre é inserido, gostaria de saber se existe alguma forma de aplicar uma espera ou atraso neste gatilho para que ele possa capturar este valor sem problemas, grato!
  3. ... o procedimento deverá atualizar os campos "quantmsgnaolidas" e "quantamigosativos", existentes na tabela de usuários. Cada um destes campos está relacionado de forma indireta as tabelas de mensagem e amigos. Deverá ser postado um arquivo em formato TXT ou DOC contendo o código em ORACLE do procedimento criado. Alguém pode me ajudar por favor? :)
  4. Salve galera estou com um problema em uma consulta no banco de dados. Preciso trazer um xml de um campo porém tem alguns lançamentos que estão com mais de 4000 caracteres, estou usando para a pesquisa o seguinte select SELECT ID_WS_GATEWAY, ID_WS_CONFIG, STATUS, ERRCODE, ERRMSG, FOLDER, FILENAME, DATE_IN, DATE_ON, SITE, WS, DBMS_LOB.SUBSTR(T.XMLDATA.getClobVal(),4000,1) XMLDATA, DIRECTION FROM WS_GATEWAY T Tem alguma outra forma de buscar uma quantidade maior neste campo?
  5. 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á!
  6. 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)
  7. fabissilva

    SendMail PL/SQL Gmail

    desenvolvi em PL / SQL uma procedure que envia email que está funcionando perfeitamente. Porém foi mudado o servidor de email para Gmail, que requer autenticação e o tipo de conexão é SSL. Poderiam me ajudar com essas alterações?A versão do banco de dados é o 11.CREATE OR REPLACE PROCEDURE PRC_JUN_SEND_MAIL(TO_NAME VARCHAR2,SUBJECT VARCHAR2,MESSAGE VARCHAR2)ISL_BODY VARCHAR2(32767);L_MAILHOST VARCHAR2(64) := ''smtp.gmail.com'';P_USERNAME_ VARCHAR2(50) := ''admin@jun.net'';P_PASSWORD_ VARCHAR2(50) := ''***********'';L_DE VARCHAR2(64) := ''Remetente'';L_FROM VARCHAR2(64) := ''admin@jun.net'';l_port VARCHAR(7) := ''587'';L_MAIL_CONN UTL_SMTP.CONNECTION;BEGINL_MAIL_CONN := UTL_SMTP.OPEN_CONNECTION(L_MAILHOST,l_port);Dbms_Output.Put_Line (''apos conectar'');UTL_SMTP.HELO(L_MAIL_CONN, L_MAILHOST);Dbms_Output.Put_Line (''hello'');UTL_SMTP.COMMAND (L_MAIL_CONN, ''AUTH LOGIN'');Dbms_Output.Put_Line (''AUTH LOGIN'');UTL_SMTP.COMMAND (L_MAIL_CONN, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_USERNAME_))));UTL_SMTP.COMMAND (L_MAIL_CONN, UTL_RAW.CAST_TO_VARCHAR2( UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW(P_PASSWORD_))));UTL_SMTP.MAIL(L_MAIL_CONN, L_FROM);UTL_SMTP.RCPT(L_MAIL_CONN, TO_NAME);UTL_SMTP.OPEN_DATA(L_MAIL_CONN);UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''FROM:'' ||L_DE||''<''|| L_FROM|| ''>'' || UTL_TCP.CRLF));UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''TO:'' ||TO_NAME||UTL_TCP.CRLF));UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''SUBJECT:'' ||SUBJECT||UTL_TCP.CRLF));UTL_SMTP.WRITE_RAW_DATA( L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(''CONTENT-TYPE: TEXT/HTML; CHARSET=ISO-8859-1''||UTL_TCP.CRLF));UTL_SMTP.WRITE_DATA(L_MAIL_CONN, '' ''||UTL_TCP.CRLF);UTL_SMTP.WRITE_RAW_DATA(L_MAIL_CONN, UTL_RAW.CAST_TO_RAW(UTL_TCP.CRLF||MESSAGE));UTL_SMTP.CLOSE_DATA(L_MAIL_CONN);UTL_SMTP.QUIT(L_MAIL_CONN);END;
  8. asacap1000

    resultado em cada linha

    Galera estou com uma consulta que ainda não consegui entender o porque. gostaria que ela trouxesse em apenas uma linha mas não vem de forma alguma. SELECT BO.LAGER, BO.ID_OS, K.ID_KLIENT, K.SUCHBEGRIFF CNPJ_CPF, K.NAME, BI.DIV_1 LOTE, BI.DIV_10 DI_DDE, (SELECT DISTINCT DIS.ID_DISPATCHER FROM FISCAL.DOCHD DC, WMS_EADI.DISPATCHER DIS WHERE DC.DOCHD_DOC_ID = BO.NR_NF AND DC.DOCHD_RPS_DESP = DIS.SUCHBEGRIFF) COD_COMISSARIA, (SELECT DISTINCT DIS.BEZ FROM FISCAL.DOCHD DC, WMS_EADI.DISPATCHER DIS WHERE DC.DOCHD_DOC_ID = BO.NR_NF AND DC.DOCHD_RPS_DESP = DIS.SUCHBEGRIFF) COMISSARIA, BO.NR_NF, BO.DATE_BILL, BO.DATE_EMISS, --------ABAIXO OS TIPOS DE SERVIÇOS ONDE ESTÃO OCORRENDO CADA RESULTADO ELE CRIA UMA LINHA---------------- (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'ARMAZ')) VLR_ARMAZ, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'GER.RISCO')) VLR_GER_RISCO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'MOVIMENT')) VLR_MOVIMENTACAO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'DESUNIT')) VLR_DESUNIT, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'PESAGEM')) VLR_PESAGEM, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT LIKE 'AVERBA%')) VLR_AVERBACAO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND WER.WERT = 'FAT.MINIMO.')) VLR_FAT_MINIMO, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND BLL.BILLITE NOT IN ('21.02', '21.03') AND WER.WERT = 'OUT.SERV.')) VLR_OUTROS_SERV, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND BLL.BILLITE = '21.02' AND WER.WERT = 'OUT.SERV.')) TRANSF_IN, (SELECT SUM(ROUND(OSI.PREIS, 2)) FROM BILL_OS_ITEM OSI WHERE OSI.LAGER = BO.LAGER AND OSI.ID_KLIENT = K.ID_KLIENT AND OSI.ID_OS = BO.ID_OS AND OSI.BILLITE = BI.BILLITE AND OSI.DIV_1 = BI.DIV_1 --AND NVL(OSI.DIV_10, 'x') = NVL(BI.DIV_10, 'x') AND OSI.BILLITE IN (SELECT BLL.BILLITE FROM BILL_ITEM BLL, WERTE WER WHERE BLL.TIPO_FAT = WER.WERT AND WER.WERTE_BER = 'ITENSF' AND BLL.BILLITE = '21.03' AND WER.WERT = 'OUT.SERV.')) TRANSF_OUT FROM BILL_OS BO, BILL_OS_ITEM BI, KLIENTEN K WHERE BO.LAGER = BI.LAGER AND BO.ID_KLIENT = BI.ID_KLIENT AND BO.ID_OS = BI.ID_OS AND BO.LAGER = K.LAGER AND BO.ID_KLIENT = K.ID_KLIENT and k.id_klient = '3099' and BO.NR_NF = '121304' AND BO.STATUS = '90' AND TRUNC(BO.DATE_BILL) BETWEEN '28/08/2019' AND '28/08/2019' GROUP BY BO.LAGER, BO.ID_OS, K.ID_KLIENT, K.SUCHBEGRIFF, K.NAME, BO.DATE_EMISS, BO.NR_NF, BO.DATE_BILL, BI.BILLITE, BI.DIV_1, BI.DIV_10 Alguem consegue identificar neste select porque ele vem assim?
  9. Suporte Risti

    Criar .bat e armazenar variavel do mesmo em procedure plsql

    Bom dia, estou iniciando com bando de dados oracle e plsql e estou precisando de uma ajuda para criar um arquivo .bat para nossa empresa em que o usuário consiga apagar os horários do nosso banco de dados, mas não sei como fazer a procedure identificar o dado digitado na variável do .bat script do .bat @echo Off title limpeza de horarios. : inicio cls echo -------------------Informe uma data valida, apenas numeros------------------- echo . echo ------------------------------informe a data--------------------------------- set /p data = echo . echo . sqlplus usuario/senha@intancia @script.sql cls echo . : Fim echo . echo -----------------Horario apagado----------------- echo . pause O script em questão é esse, ele executa uma procedure, ela apaga os horários, o parâmetro da mesma é uma data ex: abaixo. set serveroutput on begin sp_apaga_horario('31072019'); end; / exit como eu faço para o dado salvo na variável data seja executado no parâmetro da procedure? não estou conseguindo fazer isso, estou tendo que alterar o script para data que o usuário quer apagar e somente executando o .bat digitando números aleatórios para que ele não trave, não sei como fazer para a mesma identificar esse dado estando em um script diferente. Quem souber e puder me ajudar ja agradeço desde já.
  10. felipeaggs

    Totalização de valores por itens

    Boa-tarde, pessoal! Estou com um problema e não consigo resolvê-lo de forma alguma. Vou exemplificar aqui o que acontece. Tenho duas tabelas, uma tabela é relativa a registro de nota fiscal, estruturada da seguinte forma (edição simplificada). TGFCAB ID | DTNEG | NUMNOTA | CODTIPOPER | CODEMP | 1 | 01/01/2019 | 1000 | 50 | 7 | 2 | 02/01/2019 | 1001 | 50 | 7 | 3 | 02/01/2019 | 1002 | 50 | 7 | 4 | 03/01/2019 | 1003 | 50 | 7 | TGFITE ID | NUMNOTA | QTDNEG| VLRUNIT | VLRTOT | CODVOL | PRODUTONFE 1 |1001 | 5 | 10 | 50 | UN | 10 2 |1001 | 10 | 700 | 7000 | TN | 11 3 |1002 | 3 | 20 |60 | UN | 12 4 |1003 | 20 | 7 | 140 | UN | 10 5 |1003 | 100 | 7 | 700 | UN | 10 Eu preciso realizar um select de forma que traga as Informação abaixo. PRODUTO| QTDNEGMES | VALORTOTAL 10 | 125 | 890 11 | 10 | 7000 12 | 3 | 60 Já tentei de todas as formas possíveis, porém eu não consigo de forma alguma. Por favor, alguém poderia me ajudar?
  11. Abran

    PL SQL (Select dentro do LOOP)

    Gostaria de poder fazer um SELECT dentro do LOOP igual ao exemplo abaixo. Esse exemplo não deu certo, se tirar esse SELECT que está dentro do LOOP, tudo funciona. O problema está no Select dentro do LOOP que nao aceita. ORA-01403: dados não encontrados A ideia é, Z45 grava cliente, e Z46 grava títulos em aberto. Toda vez que rodar, deverá checar se existe novos títulos que ainda não foram gravados, e só gravar os que ainda não foram. Alguem sabe alguma maneira de fazer o que preciso ? DECLARE v_CODCLI VARCHAR2 (6); vPREFIXO VARCHAR2 (3); vNUM VARCHAR2 (9); vPARCELA VARCHAR2 (3); BEGIN v_CODCLI := '0'; FOR V_FUNC IN ( SELECT E1_FILIAL, A1_COD, A1_LOJA, A1_PESSOA, E1_PREFIXO, E1_NUM, E1_PARCELA, E1_TIPO, E1_NATUREZ, E1_EMISSAO, E1_VENCREA, E1_VALOR, CASE WHEN TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') < 0 THEN 0 ELSE TO_DATE('20190627', 'yyyymmdd') - TO_DATE(E1_VENCTO, 'yyyymmdd') END ATRASO FROM SE1010 SE1 INNER JOIN SA1010 A1 ON A1.A1_COD = E1_CLIENTE AND A1_LOJA = E1_LOJA AND A1.D_E_L_E_T_ = SE1.D_E_L_E_T_ WHERE SE1.D_E_L_E_T_ = ' ' ORDER BY A1_LOJA, A1_COD ) LOOP SELECT Z46_PREFIX, Z46_NUM, Z46_PARCEL, Z46_TIPO, Z46_NATURE INTO vPREFIXO, vNUM, vPARCELA, vTIPO, vNATUREZ FROM Z46010 Z46 WHERE Z46_PREFIX = V_FUNC.E1_PREFIXO AND Z46_NUM = V_FUNC.E1_NUM AND Z46_PARCEL = V_FUNC.E1_PARCELA AND D_E_L_E_T_ = ' ' ; IF vPREFIXO || vNUM || vPARCELA != V_FUNC.E1_PREFIXO || V_FUNC.E1_NUM || V_FUNC.E1_PARCELA THEN IF V_FUNC.A1_COD <> v_CODCLI THEN v_CODCLI := V_FUNC.A1_COD; INSERT INTO DADOSADV.Z45010 ( Z45_RECNO, Z45_FILIAL, Z45_CODCLI, Z45_LOJA, Z45_PESSOA, Z45_DTCAD ) VALUES ( (SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) + 1 END Z45_RECNO FROM Z45010) , V_FUNC.E1_FILIAL, V_FUNC.A1_COD, V_FUNC.A1_LOJA, V_FUNC.A1_PESSOA, TO_CHAR(SYSDATE, 'YYYYMMDD') ); COMMIT; END IF; INSERT INTO DADOSADV.Z46010 ( Z46_RECNO, Z46_RECZ45, Z46_STATIT, Z46_PREFIX, Z46_NUM, Z46_PARCEL, Z46_TIPO, Z46_NATURE, Z46_VALOR, Z46_ATRASO, Z46_DTCAD ) VALUES ( (SELECT CASE WHEN MAX(Z46_RECNO) IS NULL THEN 1 ELSE MAX(Z46_RECNO) + 1 END Z46_RECNO FROM Z46010) , (SELECT CASE WHEN MAX(Z45_RECNO) IS NULL THEN 1 ELSE MAX(Z45_RECNO) END Z45_RECNO FROM Z45010), 0, V_FUNC.E1_PREFIXO, V_FUNC.E1_NUM, V_FUNC.E1_PARCELA, V_FUNC.E1_TIPO, V_FUNC.E1_NATUREZ, 20, V_FUNC.ATRASO, TO_CHAR(SYSDATE, 'YYYYMMDD') ); COMMIT; END IF; END LOOP; END;
  12. Estou tentando mandar uma "Blind Copy" pelo nossa Procedure de envio de email , pela documentação estaria ok , mas não está enviando nem gerando qualquer erro , o código está abaixo , os itens sensíveis foram trocados por "x" O que posso estar fazendo de errado ? SP : create or replace PROCEDURE ENVIA_EMAIL_CLOBHBC (ds_email_origem_w varchar2, ds_email_destino_p varchar2, ds_assunto varchar2, p_attach_clob IN CLOB DEFAULT NULL, p_httm in varchar2 default 'S', p_log out varchar2, p_nome_destino in varchar2 default null) is l_step PLS_INTEGER := 12000; ds_smtp_w varchar2(20) := 'xx.xx.x.xx'; /* Abre conex?o SMTP e HTTP */ CONEXAO UTL_SMTP.CONNECTION; vs_origem varchar2(100) := ds_email_origem_w; -- vs_para varchar2(100); vs_cc varchar2(100); -- PROCEDURE send_header(name IN VARCHAR2, header IN VARCHAR2) AS BEGIN UTL_SMTP.WRITE_DATA(CONEXAO, name || ': ' || header || UTL_TCP.CRLF); END; BEGIN /* Abre conex?o com um Servidor SMTP(Simple Mail Transfer Protocol), porta padr?o SMTP e 25 */ CONEXAO := utl_smtp.open_connection (ds_smtp_w,25); UTL_SMTP.HELO (CONEXAO, ds_smtp_w); /* Endereco do servidor de SMTP */ --utl_smtp.command (CONEXAO, 'AUTH LOGIN'); --utl_smtp.command (CONEXAO, utl_raw.cast_to_varchar2(utl_encode.base64_encode(utl_raw.cast_to_raw((ds_user_id_w))))); --UTL_SMTP.COMMAND (CONEXAO, UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.BASE64_ENCODE(UTL_RAW.CAST_TO_RAW((DS_SENHA_SMTP_W))))); UTL_SMTP.MAIL (CONEXAO, ('<' || vs_origem || '>')); /* E-mail de quem esta mandando */ -- se estiver em lista separado por ";" manda para o 1º como "para" e para o 2º como CC (copia) /* Para quem vou mandar */ IF INSTR(ds_email_destino_p,';') = 0 THEN vs_para := ds_email_destino_p; UTL_SMTP.RCPT (CONEXAO, ('<' || ds_email_destino_p || '>')); /* Para quem vou mandar */ ELSE vs_para := SUBSTR(ds_email_destino_p,1,INSTR(ds_email_destino_p,';')-1); vs_cc := SUBSTR(ds_email_destino_p,INSTR(ds_email_destino_p,';')+1,length(ds_email_destino_p)); UTL_SMTP.RCPT (CONEXAO, ('<' || vs_para || '>')); /* Para quem vou mandar original */ UTL_SMTP.RCPT (CONEXAO, ('<' || vs_cc || '>')); /* Para quem vou mandar copia */ END IF; UTL_SMTP.OPEN_DATA(CONEXAO); If upper(p_httm) <> 'S' Then send_header('Subject','=?iso-8859-1?Q?' ||UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto)))); Else --send_header('Subject','=?iso-8859-1?Q?' ||UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto)))|| '?='); send_header('Subject',UTL_RAW.CAST_TO_VARCHAR2(UTL_ENCODE.QUOTED_PRINTABLE_ENCODE(UTL_RAW.CAST_TO_RAW(ds_assunto)))); end if; If upper(p_httm) <> 'S' Then UTL_SMTP.write_data(CONEXAO, 'Content-Type: text/html; charset="UTF-8"' || utl_tcp.CRLF); Else UTL_SMTP.write_data(CONEXAO, 'Content-Type: text/html; charset="UTF-8"' || utl_tcp.CRLF ); end if; send_header('From',ds_email_origem_w); --se denominou o destino formata o envio , senão vai o proprio email --tratamento diferente do "from" pois este é em geral dinamico --feito pela stored procedure chamadora if trim(p_nome_destino) is null then send_header('To',vs_para); else send_header('To','"'||trim(p_nome_destino)||'" <'||vs_para||'>'); end if; If Trim(vs_cc) is not null Then--copia (nao formata o destino) send_header('CC',vs_cc); end if; send_header('BCC',vs_origem);---<<< A LINHA COM PROBLEMA PARECE SER ESTA *********************** FOR i IN 0 .. TRUNC((DBMS_LOB.getlength(p_attach_clob) - 1 )/l_step) LOOP UTL_SMTP.WRITE_DATA(CONEXAO, DBMS_LOB.substr(p_attach_clob, l_step, i * l_step + 1)); END LOOP; UTL_SMTP.CLOSE_DATA(CONEXAO); UTL_SMTP.QUIT (CONEXAO); Exception when OTHERS then utl_smtp.quit (conexao); p_log := 'Erro: ' || SQLERRM; END ENVIA_EMAIL_CLOBHBC;
  13. edvaldo joviano de paula

    Comparação de valores iguais em linhas diferentes de uma consulta

    Prezados, boa tarde! Preciso de uma ajuda sendo possível: Tenho o seguinte cenário em uma consulta ( formação de kits de produtos tendo como produto principal um valor igual, ex: produto 1 é formado pelos produtos 2 e 3) select codkit, produtos from kit where codkit = 1 --- ---- 1 2 1 3 Percebem que o resultado traz o codigo do kit (1) e os produtos que compoem este kit (2,3), porem o produto 2 tambem faz parte do kit 4 junto com o produto 10 e produto 3 faz parte do kit 5 junto com o produto 11 sendo: kit 1 (2,3) kit 4 (2,10) kit 5 (3,11). Eu preciso de uma ajuda sobre alguma função que ao comprar os produtos 2 e 3 e estes estando na mesma nota fiscal (select produtos from notafiscal = x) traga o resultado do kit que estes dois produtos juntos formam, exemplo, ao pesquisar (select produtos from notafiscal = x) nesta nota existir os produtos 2 e 3 traga o resultado 1, se na nota existir os produtos 2 e 10 traga o resultado 4 e se existir na consulta dos itens da nota os itens 3 e 11 o resultado seja 5. Caso na pesquisa eventualmente existir por exemplo 10 unidades do item 2, 5 unidades do item 3 e 5 unidades do item 10, o resultado deve ser 1 e 4 pois 5 unidades do 2+5 unidades do 3 forma o kit 1 e 5 unidades do 2+ 5 unidades do 10 formam o kit 4. Espero ter explicado de forma a ser entendido e agradeço a ajuda.
  14. Carolm

    Validação de CNPJ com PL/SQL

    Boa Noite, tenho que solucionar um exercício de PL/SQL ,onde devo encontrar um algorítimo/código para poder analisar um CNPJ ,que sera informado pelo usuário,o SQL Developer deve realizar o cálculo para pegar os dígitos validadores desse CNPJ, e por fim analisar se ele é válido ou inválido e no console apresentar o texto : Valido ou inválido dependendo do resultado obtido com o calculo! Nesse exercício sera aberta uma "tela" que vai pedir pro usuário digitar o numero do CNPJ,esse CNPJ sera capturado e analisado através de um calculo de validação de CNPJ (ira analisar os dígitos verificadores) e com o resultado ele ira informar ao usuário se o numero é VALIDO ou INVALIDO! Enunciado : CRIE UM BLOCO ANÔNIMO PL/SQL ORACLE QUE IRÁ SOLICITAR PARA O USUÁRIO O NÚMERO DO: CNPJ - BLOCO ANÔNIMO-DÍGITO VERIFICADOREu rodei o código abaixo o SQL informou que a função foi compilada,porém não aparece a mensagem dizendo se o numero informado é válido ou inválido...Será que poderiam me ajudar ? set serveroutput on ACCEPT CNPJ PROMPT 'Digite o numero do CNPJ' CREATE OR REPLACE FUNCTION CNPJ (p_cgc IN CHAR) RETURN BOOLEAN IS m_total NUMBER := 0; m_digito NUMBER := 0; BEGIN FOR i IN 1..4 LOOP m_total := m_total + substr(p_cgc,i,1) * (6 - i); END LOOP; FOR i IN 5..12 LOOP m_total := m_total + substr(p_cgc,i,1) * (14 - i); END LOOP; m_digito := 11 - mod(m_total,11); IF m_digito > 9 THEN m_digito := 0; END IF; IF m_digito != substr(p_cgc,13,1) THEN RETURN FALSE; END IF; m_digito := 0; m_total := 0; FOR i IN 1..5 LOOP m_total := m_total + substr(p_cgc,i,1) * (7 - i); END LOOP; FOR i IN 6..13 LOOP m_total := m_total + substr(p_cgc,i,1) * (15 - i); END LOOP; m_digito := 11 - mod(m_total,11); IF m_digito > 9 THEN m_digito := 0; END IF; IF m_digito != substr(p_cgc,14,1) THEN RETURN FALSE; END IF; RETURN TRUE; IF CNPJ(14) = TRUE THEN DBMS_OUTPUT.PUT_LINE('VERDADEIRO'); ELSE DBMS_OUTPUT.PUT_LINE('FALSO'); END IF; END; /
×

Informação importante

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