Jump to content

ISREL LOUIS RAMOS

Members
  • Content count

    20
  • Joined

  • Last visited

Community Reputation

0 Comum

About ISREL LOUIS RAMOS

Informações Pessoais

  • Sexo
    Masculino
  1. ISREL LOUIS RAMOS

    Executar procedure com PHP

    Boa tarde, Criei uma procedure a qual segue em anexo, quando pelo PLSQL faço o TEST dela, trago os valores corretamente. Quando vou executar via PHP ela dá erro: ORA-06550: linha 1, coluna 47: PLS-00201: identifier 'N' must be declared ORA-06550: linha 1, coluna 7: PL/SQL: Statement ignored Alguém consegue saber o por que do erro? Está certo a execução dos parametros no PHP, eu devo chamar o BD oracle dessa forma? procedure.txt
  2. ISREL LOUIS RAMOS

    procedure para ano contábil

    Boa tarde, Possuímos o ano contábil de 01/04/XXXX a 31/03/XXXY, no desenvolvimento de uma procedure para que ele entenda o ano para a junção do acumulado do período eu utilizei a seguinte validação: select con_start from msiconfi where con_ini = SUBSTR(to_char(sysdate), 7, 4) ; Porém como criei no ano passado não obtive problemas, na virada desse ano a procedure começou a apresentar problemas, devido ao campo vir zerado, pois ele estava buscando o ano de 2016 e estamos no ano de 2017, para uma solução rápida no processo alterei para select con_start from msiconfi where con_ini = SUBSTR(to_char(sysdate), 7, 4) -1; Agora ele trás os valores do ano de 2017, baseado o acumulado no ano de 2016. Só que terei problemas no dia 01/04, tendo que mudar manualmente (voltando a primeira forma) e no próximo ano mudando, em resumo uma correção paliativa. Gostaria de uma idéia, pensei em usar IF quando fosse no período de 01/01/XXXY a 31/03/XXXY, caso contrário ele utilizaria a data como o formato anterior, porém não estou conseguindo fazer. Alguém possui uma idéia do que fazer?
  3. ISREL LOUIS RAMOS

    group by trazer hora zerada

    Terminei a query, alterei para que ela fosse number para melhorar no order by. Anterior estava char. Segue: select hr1.*, hr2.* from ( Select to_number(level - 1) as hora FROM dual CONNECT BY LEVEL <= 24 ) hr1 , ( select APT.DT_SAIDA, to_number(to_char(APT.HR_SAIDA, 'hh24')) AS HORA, SUM(APT.QT_LIQUIDO / 1000)AS CANA_ENTREGUE, COUNT(*) AS CARGAS from PIMSPRD.APT_CARGAS APT, PIMSPRD.UPNIVEL3 UP3 where APT.DT_SAIDA = TO_DATE('27/10/2016','DD/MM/YYYY') and UP3.CD_SAFRA = APT.CD_SAFRA and UP3.CD_UPNIVEL1 = APT.CD_UPNIVEL1 and UP3.CD_UPNIVEL2 = APT.CD_UPNIVEL2 and UP3.CD_UPNIVEL3 = APT.CD_UPNIVEL3 and ((APT.CD_UNID_IND = 1)) group by APT.DT_SAIDA, to_char(APT.HR_SAIDA,'hh24') order by APT.DT_SAIDA, to_char(APT.HR_SAIDA,'hh24') ) hr2 where to_number(trunc(hr1.hora)) = hr2.hora(+) order by hr1.hora Obrigado.
  4. ISREL LOUIS RAMOS

    group by trazer hora zerada

    Bom dia amigo, Então, eu fiz uma logica diferente, usando os seus conceitos: select hr1.*, hr2.* from ( Select to_char(level - 1) as hora FROM dual CONNECT BY LEVEL <= 24 ) hr1 , ( select APT.DT_SAIDA, to_number(to_char(APT.HR_SAIDA, 'hh24')) AS HORA, SUM(APT.QT_LIQUIDO / 1000)AS CANA_ENTREGUE, COUNT(*) AS CARGAS from PIMSPRD.APT_CARGAS APT, PIMSPRD.UPNIVEL3 UP3 where APT.DT_SAIDA = TO_DATE('27/10/2016','DD/MM/YYYY') and UP3.CD_SAFRA = APT.CD_SAFRA and UP3.CD_UPNIVEL1 = APT.CD_UPNIVEL1 and UP3.CD_UPNIVEL2 = APT.CD_UPNIVEL2 and UP3.CD_UPNIVEL3 = APT.CD_UPNIVEL3 and ((APT.CD_UNID_IND = 1)) group by APT.DT_SAIDA, to_char(APT.HR_SAIDA,'hh24') order by APT.DT_SAIDA, to_char(APT.HR_SAIDA,'hh24') ) hr2 where hr1.hora = hr2.hora(+) order by hr1.hora Muito obrigado.
  5. ISREL LOUIS RAMOS

    group by trazer hora zerada

    Boa tarde, Preciso do seguinte auxilio, fiz um select conforme mostra abaixo e agrupo no dia as horas, então conforme o movimento eu consigo saber as montante de movimentação por hora. Exemplo: 00 = 1000 01 = 1500 02 = 2000 O problema está quando eu não obtive movimento na hora, ou seja, como usei group by, quando eu não tenho movimento ele não me trás nenhum resultado e na verdade para comparativos eu preciso que traga zero. Hoje está assim, exemplo: 00 = 1000 01 = 1500 02 = 2000 05 = 1000 E eu precisava que trouxesse esse acumulado, assim: 00 = 1000 01 = 1500 02 = 2000 03 = 0 04 = 0 05 = 1000 Lembrando que como eu uso o sysdate e quero acompanhar graficamente as horas, eu não queria que ele preenchesse as demais horas, que ainda não passaram, exemplo agora são 15:50h e ele colocasse zero para o horário das 17,18,19,20, etc. É possível? select APT.DT_SAIDA, to_char(APT.HR_SAIDA, 'hh24') AS HORA, SUM(APT.QT_LIQUIDO / 1000)AS CANA_ENTREGUE, COUNT(*) AS CARGAS from PIMSPRD.APT_CARGAS APT, PIMSPRD.UPNIVEL3 UP3 where APT.DT_SAIDA = TO_DATE(sysdate ,'DD/MM/YYYY') and UP3.CD_SAFRA = APT.CD_SAFRA and UP3.CD_UPNIVEL1 = APT.CD_UPNIVEL1 and UP3.CD_UPNIVEL2 = APT.CD_UPNIVEL2 and UP3.CD_UPNIVEL3 = APT.CD_UPNIVEL3 and ((APT.CD_UNID_IND = 1)) group by APT.DT_SAIDA, to_char(APT.HR_SAIDA,'hh24') order by APT.DT_SAIDA, to_char(APT.HR_SAIDA,'hh24')
  6. ISREL LOUIS RAMOS

    Calcular % em querys

    Deu certo, valeu grande Motta. Abraços
  7. ISREL LOUIS RAMOS

    Calcular % em querys

    Deu 100%, valeu grande Motta. Abraços.
  8. ISREL LOUIS RAMOS

    Calcular % em querys

    Boa tarde, criei a seguinte query: select b.data, a.desc_grupo AS GRUPO, a.desc_variavel AS INDICADOR, b.vl_dia AS DIA_PREV, nvl(c.vl_dia, 0) + nvl(d.vl_dia, 0) AS DIA_REALIZ, b.vl_mes AS MES_PREV, nvl(c.vl_mes, 0) + nvl(d.vl_mes, 0) AS MES_REALIZ, b.vl_ANO AS ACUM_PREV, nvl(c.vl_ANO, 0) + nvl(d.vl_ANO, 0) AS ACUM_REALIZ from PIMSPRD.tbita_bi_indicadores a inner join pimsprd.tbita_bi_indicPREV b on b.indicador = a.indicador left join pimsprd.tbita_bi_indicREALIZ c on c.data = b.data and c.indicador = a.indicador left join pimsprd.tbita_bi_indicREALIZ_MANUAL d on d.data = b.data and d.indicador = a.indicador WHERE B.DATA = TO_DATE(SYSDATE - 1, 'DD/MM/YYYY') order by C.DATA, A.GRUPO, A.ORDEM_SEQ Ai surgiu a necessidade de efetuar o calculo da variação entre o DIA_PREV e DIA_REALIZ, adicionei o seguinte campo ( esta comentado): b.vl_dia AS DIA_PREV, nvl(c.vl_dia, 0) + nvl(d.vl_dia, 0) AS DIA_REALIZ, -- ((nvl(c.vl_dia, 0) + nvl(d.vl_dia, 0)/ b.vl_dia)*100), Porém acontece que alguns indicadores previstos são com o valor 0 e alguns realizados são 0 também, ou seja, fazendo esse comando direto aparece a mensagem: divisor is equal to zero, alguém sabe alguma operação ou maneira diferente que eu possa estar fazendo?
  9. Estou fazendo um left outer join entre duas tabelas: select B.DATA,B.VL_DIA from pimsprd.tbita_bi_indicadores A LEFT OUTER JOIN PIMSPRD.TBITA_BI_INDICREALIZ B ON A.INDICADOR = B.INDICADOR where A.indicador = 'VALOR904' AND B.DATA >= '01/05/2016' AND B.DATA <= '31/05/2016' ORDER BY B.DATA Resultado: DATA VL_DIA 01/05/2016 0,00000 02/05/2016 0,00000 03/05/2016 0,00000 04/05/2016 0,00000 05/05/2016 20,00000 06/05/2016 28,77000 07/05/2016 20,94000 08/05/2016 20,94000 09/05/2016 31,52000 10/05/2016 10,84000 11/05/2016 0,00000 12/05/2016 25,00000 13/05/2016 0,00000 14/05/2016 33,00000 15/05/2016 52,90000 16/05/2016 52,90000 17/05/2016 52,90000 Ele me trás os dados os quais eu necessito, porém em linhas, gostaria que fossem em colunas. Teria como me ajudar? Necessito, pois tenho a ideia de fazer um gráfico desses valores após efetuar um union all com a tabela dos valores previstos (2 passo). Para o controle mensal (essas datas serão parametrizavéis, conforme o período necessário) Resultado esperado: 01/05/2016 02/05/2016 03/05/2016 REALIZADO 0,00000 0,00000 0,00000 Previsto(2 Passo) 1 1 1
  10. ISREL LOUIS RAMOS

    Problemas na execução de SP vindo valores de csv

    Boa tarde, Achei a solução e compartilho. 1 - Em relação a especificação da era o tamanho do campo na criação da tabela, alterei de 12 para 25. 2 - em relação ao zero, no csv mudei para varchar2 no cursor, com isso ele aceita valores corretos. Segue a nova SP criada. create or replace procedure pimsprd.PR_ITABI_PREV(P_DATA in date, P_VARIAVEL in varchar2, P_VL_DIA in varchar2, P_VL_MES in varchar2, P_VL_ANO in varchar2) IS c_count number; c_vl_dia number; c_vl_MES number; c_vl_ANO number; BEGIN c_vl_dia := to_number(p_vl_dia); c_vl_MES := to_number(p_vl_MES); c_vl_ANO := to_number(p_vl_ANO); -- Verifica se existe o dado previsto do indicador Select count(*) INTO c_count from pimsprd.tbita_bi_indicPREV PREV where PREV.DATA = P_DATA and PREV.VARIAVEL = P_VARIAVEL; If c_count > 0 then update pimsprd.tbita_bi_indicPREV set VL_DIA = c_vl_dia, VL_MES = C_VL_MES, VL_ANO = C_VL_ANO where DATA = P_DATA and VARIAVEL = P_VARIAVEL; Else insert into pimsprd.tbita_bi_indicPREV (DATA, VARIAVEL, VL_DIA, VL_MES, VL_ANO) values (p_DATA, p_VARIAVEL, c_vl_dia, C_VL_MES, C_VL_ANO); end if; End;
  11. ISREL LOUIS RAMOS

    Problemas na execução de SP vindo valores de csv

    Criei a tabela tbita_bi_indicPREV com esse formato: create table pimsprd.tbita_bi_indicPREV ( DATA DATE NOT NULL, VARIAVEL varchar(30) NOT NULL, VL_DIA NUMBER (12,5), VL_MES NUMBER (12,5), VL_ANO NUMBER (12,5), CONSTRAINT tbita_bi_indicPREV_PK PRIMARY KEY (VARIAVEL,DATA) USING INDEX TABLESPACE PIMS_DATA_004) TABLESPACE pims_indx_004 ; ----------------------------------------------------------------------------------------------------------------------- Posteriormente eu criei a procedure com esse formato: create or replace procedure pimsprd.PR_ITABI_PREV(P_DATA in date, P_VARIAVEL in varchar2, P_VL_DIA in number, P_VL_MES in number, P_VL_ANO in number) IS c_count number; BEGIN -- Verifica se existe o dado previsto do indicador Select count(*) INTO c_count from pimsprd.tbita_bi_indicPREV PREV where PREV.DATA = P_DATA and PREV.VARIAVEL = P_VARIAVEL; If c_count > 0 then update pimsprd.tbita_bi_indicPREV set VL_DIA = P_VL_DIA, VL_MES = P_VL_MES, VL_ANO = P_VL_ANO where DATA = P_DATA and VARIAVEL = P_VARIAVEL; Else insert into pimsprd.tbita_bi_indicPREV (DATA, VARIAVEL, VL_DIA, VL_MES, VL_ANO) values (p_DATA, p_VARIAVEL, p_VL_DIA, P_VL_MES, P_VL_ANO); end if; End; --------------------------------------------------------------------------------------------- Quando vou testar ela com um valor muito grande por exemplo:12345678,90 Elá erro de tamanho especifico da coluna Quando vou testar ela com um valor com final 00 por exemplo:123456,00 Ela não aceita e da erro. --------------------------------------------------------------------------------------------- Pensei na hipotese de na SP colocar os valores em number para varchar2 e depois mudar de varchar para number através de cursor, pois ai eu não preciso alterar na tabela, pois na tabela a intenção é que eles sejam valores numéricos. Isso faz necessário, pois vou importar os dados dela de uma planilha csv, com valores positivos e negativos dos dados. Estu fazendo correto? alguém tem alguma sugestão?
  12. ISREL LOUIS RAMOS

    Trazer dados mensais

    Motta, Eu estava fazendo bobagem, utilizando a sua dica deu certo. Obrigado, novamente.
  13. ISREL LOUIS RAMOS

    Trazer dados mensais

    Desculpa Motta, mas eu não entendi muito bem como fazer, utilizo o concatenar? e o meu campo dt_movimento é date. Colocando a sua sugestão fiz da seguinte forma, mas os valores não coincidem: Select SUM(FORNEC) AS CANA_FORNEC , SUM(CARGAS_FORNEC) AS CARGAS_FORNEC , SUM(PROPRIA) AS CANA_PROPRIA , SUM(CARGAS_PROPRIA) AS CARGAS_PROPRIA , MAX(dt_movimento) AS DT_MOVIMENTO from ( select CASE WHEN TPP.CD_TP_PROPR = 4 THEN SUM(APT.QT_LIQUIDO) END AS FORNEC , CASE WHEN TPP.CD_TP_PROPR = 4 THEN COUNT(*) END AS CARGAS_FORNEC , CASE WHEN TPP.CD_TP_PROPR <> 4 THEN SUM(APT.QT_LIQUIDO) END AS PROPRIA , CASE WHEN TPP.CD_TP_PROPR <> 4 THEN COUNT(*) END AS CARGAS_PROPRIA , APT.dt_movimento from PIMSPRD.APT_CARGAS APT, PIMSPRD.UPNIVEL3 UP3, PIMSPRD.TIPOPROPRI TPP where to_char(APT.DT_MOVIMENTO,'mmyyyy') = TO_char(Sysdate,'mmyyyy') And UP3.CD_SAFRA = APT.CD_SAFRA and UP3.CD_UPNIVEL1 = APT.CD_UPNIVEL1 and UP3.CD_UPNIVEL2 = APT.CD_UPNIVEL2 and UP3.CD_UPNIVEL3 = APT.CD_UPNIVEL3 and TPP.CD_TP_PROPR = APT.CD_TP_PROPR and ((APT.CD_UNID_IND = 1)) group by TPP.CD_TP_PROPR, TPP.DA_TP_PROPR,APT.dt_movimento )
  14. ISREL LOUIS RAMOS

    Trazer dados mensais

    Fiz esse select para me trazer esses dados diariamente, agora penso em trazer esses mesmos dados em valores mensais. Pensei em concatenar os dados da coluna dt_movimento MES/ANO, colocando group by deles para me trazer os valores. Só que a minha idéia é que só traga o mês atual, ou seja mesmo em concatenando os valores de JAN a DEZ, só me interessa os valores do mês atual. A opção de dar where e colocar a data beetween entre começo e fim do mês, não me agrada, pois a cada ano eu teria que mudar esse select. Alguém poderia me ajudar com uma idéia e me ajusando a construir essa parte no select? Obs: banco de dados oracle, usando plsql Select SUM(FORNEC) AS CANA_FORNEC , SUM(CARGAS_FORNEC) AS CARGAS_FORNEC , SUM(PROPRIA) AS CANA_PROPRIA , SUM(CARGAS_PROPRIA) AS CARGAS_PROPRIA , MAX(dt_movimento) AS DT_MOVIMENTO from ( select CASE WHEN TPP.CD_TP_PROPR = 4 THEN SUM(APT.QT_LIQUIDO) END AS FORNEC , CASE WHEN TPP.CD_TP_PROPR = 4 THEN COUNT(*) END AS CARGAS_FORNEC , CASE WHEN TPP.CD_TP_PROPR <> 4 THEN SUM(APT.QT_LIQUIDO) END AS PROPRIA , CASE WHEN TPP.CD_TP_PROPR <> 4 THEN COUNT(*) END AS CARGAS_PROPRIA , APT.dt_movimento from PIMSPRD.APT_CARGAS APT, PIMSPRD.UPNIVEL3 UP3, PIMSPRD.TIPOPROPRI TPP where APT.DT_MOVIMENTO = TO_DATE(Sysdate,'DD/MM/YYYY') And UP3.CD_SAFRA = APT.CD_SAFRA and UP3.CD_UPNIVEL1 = APT.CD_UPNIVEL1 and UP3.CD_UPNIVEL2 = APT.CD_UPNIVEL2 and UP3.CD_UPNIVEL3 = APT.CD_UPNIVEL3 and TPP.CD_TP_PROPR = APT.CD_TP_PROPR and ((APT.CD_UNID_IND = 1)) group by TPP.CD_TP_PROPR, TPP.DA_TP_PROPR,APT.dt_movimento )
  15. ISREL LOUIS RAMOS

    Criação do campo Mês

    Valeu Motta, Além da resposta o link me ajudou bastante. Grato pela ajuda.
×

Important Information

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