Ir para conteúdo
Fórum Script Brasil
  • 0

Como unir duas consultas em BDs diferentes?


Martinsrj

Pergunta

Olá pessoal, beleza?

Pessoal estou com uma dúvida.

Tenho o código abaixo php misturado com SQL onde é exibido os seguintes dados: Dia | Sistema | Regional | Site | Tipo | Chamado | Abertura | SLA | Fechamento | Tempo afetado | Fila | Descrição

Obs.: esses dados estão no banco MySQL !!!

<?php

set_time_limit(0);


require_once 'autenticacao.php';
require_once 'vantiveAPI.php';
require_once 'atualizaWorkFlow.php';
require_once 'queryOracle.php';

if( !temPerfil('relatorios') )
    morrer('Acesso negado');



require_once('relatorios.entrada.php');
require_once ('vantiveAPI.php');

$sql = "
    SELECT
        chamado.sq_chamado,
        sistema.no_class3,
        group_concat(regional.no_regional order by regional.no_regional separator '<br />') as regional,
        chamado.nu_chamado,
        sistema.no_class4,
        chamado.fg_aberto,
        chamado.tx_descricao,
        chamado.sq_site,
        site.no_site,
        (select fila.no_fila from fila, workflow
            where fila.sq_fila = workflow.sq_fila and workflow.nu_chamado = chamado.nu_chamado
            order by workflow.dt_data desc limit 1) as fila,
        (select fila.sq_fila from fila
            where fila.no_fila = fila) as sq_fila,
        date_format(chamado.dt_abertura,'%d') as dabertura,
        date_format(chamado.dt_abertura,'%H:%i') as habertura,
        if( chamado.fg_aberto,
            'Em aberto',
            if( date(chamado.dt_abertura) = date(chamado.dt_fechamento),
                date_format(chamado.dt_fechamento,'%H:%i'),
                date_format(chamado.dt_fechamento,'%d/%m %H:%i')
                )
            ) as fechamento,
        chamado.hr_sla,
        if( chamado.fg_aberto,
            timediff(now(),chamado.dt_abertura),
            timediff(chamado.dt_fechamento,chamado.dt_abertura)
            ) as duracao,
        if( chamado.fg_aberto,
            if(unix_timestamp(now()) - unix_timestamp(chamado.dt_abertura) > chamado.hr_sla * 3600,1,0),
            if(unix_timestamp(chamado.dt_fechamento) - unix_timestamp(chamado.dt_abertura) > chamado.hr_sla * 3600,1,0)
            ) as estourado
    FROM chamado
        left join chamado_regional using(nu_chamado)
        left join regional on chamado_regional.sq_regional = regional.sq_regional
        left join sistema on chamado.sq_sistema = sistema.sq_sistema
        left join site on chamado.sq_site = site.sq_site
    WHERE 1 and chamado.fg_excluido is null and (chamado.fg_publico or chamado.fg_critico)"
     . ($data ? " and date(chamado.dt_abertura) >= '$data'" : "")
     . ($data2 ? " and date(chamado.dt_abertura) <= '$data2'" : "")
     . ($andamento == 1 ? " and fg_aberto = 0" : ($andamento == 2 ? " and fg_aberto = 1" : ""))
     . ($class3 ? " and sistema.no_class3 = '$class3'" : "")
     . ($class4 ? " and sistema.no_class4 = '$class4'" : "")
     . ($status ? " and sistema.status = '$status'" : "")
     . ($sq_regional ? " and chamado_regional.sq_regional = '$sq_regional'" : "")
     . ($no_site ? " and site.no_site = '$no_site'" : "") 
     . " GROUP BY chamado.sq_chamado "
     . " HAVING 1"
     . ($sla == 1 ? " and estourado = 0" : ($sla == 2 ? " and estourado = 1" : ""))
     . ($sq_fila ? " and sq_fila = '$sq_fila'" : "")
     . ($sq_site ? " and sq_site = '$sq_site'" : "")
     . " ORDER BY chamado.dt_abertura";

$res = mysql_query($sql) or morrer("Erro na query: \n $sql \n\n " . mysql_error());


require_once 'relatorios.head.php';
?>
<table>
    <thead>
    <tr>
        <th>Dia
        <th>Sistema
        <th>Regional
        <th>Site        
        <th>Tipo
        <th>Chamado
        <th>Abertura
        <th>SLA
        <th>Fechamento
        <th>Tempo afetado
        <th>Fila
        <th>A&ccedil;&atilde;o        
        <th>Descrição
    <tbody>
    <?
    
    $i = 0;
    while( $row = mysql_fetch_assoc($res) ){
        if( $i == 0 ){ $cor = "par"; }else{ $cor = "impar"; }
        ?>
    <tr>
        <td class="<?=$cor;?> "><div align="center"><?=$row['dabertura'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['no_class3'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['regional'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['no_site'];?></div>    
      <td class="<?=$cor;?> "><div align="center"><?=$row['no_class4'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['nu_chamado'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['habertura'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['hr_sla'];?>:00</div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['fechamento'];?></div>
      <td class="<?=$cor;?> <?=$row['estourado']?"vermelho":"";?>"><div align="center"><?=substr($row['duracao'],0,-3);?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['fila'];?></div>
        <td class="<?=$cor;?> "><div align="center"><?=htmlentities($row['tx_acao']);?></div>      
        <td class="<?=$cor;?> "><div align="center"><?=htmlentities($row['tx_descricao']);?></div>
        <?
        $i = pow($i-1,2);
    }
    ?>
</table>
<?
require_once 'relatorios.rodape.php';
?>
Agora o que eu preciso que seja exibido o campo ação, porem ele não está no Banco Mysql e sim no Banco Oracle. A minha dúvida é como mesclar as informações do campo ações do Banco Oracle com os chamados que está no Mysql. Por enquanto o campo ação está vindo em branco. A query abaixo fornece o campo Ação que está no Banco Oracle:
----------------------------------------- CHAMADOS ABERTOS E ENCAMINHADOS PARA DETERMINADA FILA-------------------------------------

/* OBS.: UTILIZADA PELA FILA SUPORTE LOCAL E INFORMA OS CHAMADOS QUE FORRM ABERTOS OU ENCAMINHADOS POR ESSA FILA EM DETERMINADO PERÍODO.

PARA ALTERAR O PERÍODO BASTA ALTERAR O INTERVALO DA DATA NO SEGUINTE CAMPO:

where trunc(chwf.tadatarealfinal) between '01-jul-2007' and '08-jul-2007'

PARA EXECUTÁ-LA BASTA CLICAR EM QUALQUER PARTE DENTRO DA QUERY E TECLAR "CTRL+ENTER" 

SALVAR O ARQUIVO .XLS EM: 
\\niteroi\Qualidade_de_Serviço\Relatórios Gerais\Relatórios Diários\Suporte Local\Fechados e Encaminhados 
(DENTRO DA PASTA REFERENTE AO MÊS DA GERAÇÃO DA QUERY) 

NO PORTAL, É ADICIONADA ABAIXO DA ABA SUPORTE LOCAL 
*/

select '' FLAG
     , cham.swhdcaseid chamado
     , to_char(cham.swdatecreated, 'dd/mm/yyyy hh24:mi:ss') data_abertura
     , c.taname solicitante
     , c.swofficephone fone_solicitante
     , c.swofficephoneext ramal_solicitante
      , c.tasmstarget celular_solicitante
     , c.swemailaddress email_solicitante
     , c.swjobfunction cargo_solicitante
     , bene.taname beneficiado
      , bene.swofficephone fone_beneficiado
     , bene.swofficephoneext ramal_beneficiado
       , bene.tasmstarget celular_beneficiado
     , bene.swemailaddress email_beneficiado
     , bene.swjobfunction cargo_beneficiado
     , stat.taname status
     , sdet.taname detalhe_status
     , func.taname ultima_acao_por
     , decode(cham.tasecret, 1, '*** CONFIDENCIAL ***',cham.swnote) descricao_chamado
     , x.fila fila
     , x.grupo grupo
     , to_char(x.recebido, 'dd/mm/yyyy hh24:mi:ss') recebido_em
     , to_char(x.enviado_ou_fechado, 'dd/mm/yyyy hh24:mi:ss') enviado_ou_fechado
     , to_char(w.SWDATECREATED, 'dd/mm/yyyy hh24:mi:ss') data_acao
     , w.swnote acao
     , w.SWCREATEDBY acao_criada_por
     , ccusto.taname centro_custo_solicitante
     , ccusto.tacostcentercode codigo_centro_custo
     , empr.swname empresa
     , cham.tacustomerid
     , site.swsitename site
     , cham.tasiteid
     , tipo.tm_name classificacao1
     , cla1.tm_name classificacao2
     , cla2.tm_name classificacao3
     , cla3.tm_name classificacao4
     , x.tasla sla_previsto
     , x.taslareal sla_realizado
     , cham.swcreatedby Criado_Por
from swbappsp.tm_motivo tipo
   , swbappsp.tm_motivo cla1
   , swbappsp.tm_motivo cla2
   , swbappsp.tm_motivo cla3
   , swbappsp.sw_site site
   , swbappsp.sw_customer empr
   , swbappsp.ta_status_detail sdet
   , swbappsp.ta_status stat
   , swbappsp.sw_person c
   , swbappsp.sw_person bene
   , swbappsp.sw_hd_case cham
   , swbappsp.ta_cost_center ccusto
   , swbappsp.sw_person func
   , swbappsp.sw_work_log w
   , ( select chwf.swhdcaseid chamado
     , f.taname fila
     , g.swname grupo
     , chwf.tadatarealinicial recebido
     , chwf.tadatarealfinal enviado_ou_fechado
     , chwf.tasla tasla
     , chwf.taslareal taslareal
from swbappsp.ta_hd_case_workflow chwf, swbappsp.ta_fila f, swbappsp.sw_provider_grp g--, swbappsp.sw_hd_case cham
where trunc(chwf.tadatarealinicial) between '13-jul-2009' and '31-jul-2009'
--and cham.swhdcaseid = chwf.swhdcaseid
and chwf.tafimfilaid = f.tafilaid(+) --or (chwf.tainiciofilaid = f.tafilaid))
and f.swprovidergrpid = g.swprovidergrpid
--and f.swprovidergrpid in ('8909')) x
--and f.swprovidergrpid = '207' and f.taname NOT LIKE '%ADM TELEFONIA%') x
--and f.swprovidergrpid = '207') x
and f.tafilaid = '10709') x
--and f.tafilaid in('8569','8629')) x
where tipo.tm_motivoid = cham.tatype
and cla3.tm_motivoid(+) = cham.talevel3
and cla2.tm_motivoid(+) = cham.talevel2
and cla1.tm_motivoid = cham.talevel1 
--and tipo.tm_name <> 'ATENDIMENTO PRIMEIRO NIVEL'
--and cla2.tm_name = 'NICE GRAVADOR DIGITAL'
and site.swsiteid(+)  = cham.tasiteid
and empr.swcustomerid(+) = cham.tacustomerid
and sdet.tastatusdetailsid = cham.tastatusdetailid
and stat.tastatusid = cham.tastatusid
and bene.swpersonid (+) = cham.swcontactid
and cham.swreportedby = c.swpersonid
and ccusto.tacostcenterid(+) = c.tacostcenterid
and func.swlogin(+) = cham.taclosedby 
and cham.swhdcaseid = w.swobjectid(+)
and cham.swhdcaseid = x.chamado
and (w.swworklogid = (select max(w2.swworklogid) from swbappsp.sw_work_log w2 where cham.swhdcaseid = w2.swobjectid or w2.swworklogid is null)
or w.swworklogid is null)
order by 2;


select *
from swbappsp.ta_hd_case_workflow
where swhdcaseid= '3351303'

select *
from swbappsp.sw_work_log
where swobjectid = 3351303

select *
from swbappsp.sw_provider_grp

SELECT *
FROM swbappsp.ta_hd_case_workflow

,'4849','3969','2229','2231','7949','2650','6629','6189'

Aplicação

Sistema desenvolvido em PHP, HTML, CSS e Javascript, acessando o banco de dados local MySQL e integrando a inclusão de chamados consultando a base Oracle do Outro sistema.

Integração Outro sistema

A inclusão de novas ocorrências é realizada informando o número do chamado registrado no Outro sistema, a regional e site afetados.

O sistema consulta o número do chamado no Outro sistema e recupera as seguintes informações:

· Classificação

· SLA

· Informação de criticidade

· Status

· Data de criação

· Data de conclusão

· Descrição

· Workflow

Uma vez recuperadas, as informações são inseridas no banco local ao incluir o chamado na base, não sendo mais utilizada a base do Outro sistema para este chamado. A exceção é para o workflow, que é checado no Outro sistema ao consultar um chamado aberto, no intervalo mínimo de 15 minutos.

Já estou em desespero e não sei como deslinchar essa situação.

Agradeço desde já ajuda de todos!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá pessoal, boa noite!

Tentei fazer algo assim:

Tenho um código (função oracle) que tem a finalidade comunicacao com a base de dados oracle e que me retorna uma coluna da tabela.

queryOracle.php

<?php

require_once 'ultimaFuncao.php';
require_once '../vantiveConf.php';
require_once 'morrer.php';

function queryOracle($query){
    //retorna array assoc

    global $vantive;    //vantiveConf.php

    $conexao = ora_logon("{$vantive["login"]}@{$vantive["banco"]}",$vantive["senha"]);
    if( !$conexao )
        morrer('Erro em ora_logon: ' . ora_error());
    $cursor = ora_open($conexao);
    if( !$cursor )
        morrer('Erro em ora_open: ' . ora_error());

    $result = ora_parse($cursor,$query);
    $result = ora_exec($cursor);

    while(ora_fetch_into($cursor,$coluna[],ORA_FETCHINTO_NULLS|ORA_FETCHINTO_ASSOC)){}

    //if( ora_error($cursor) ) echo ora_error($cursor);
    //if( ora_error($conexao) ) echo ora_error($conexao);

    ora_close($cursor);
    ora_logoff($conexao);

    //if( count($coluna) ) array_pop($coluna); //tira um item vazio do final
    
    return $coluna;
}

?>
Fiz uma modificação no código do relatório, código abaixo: Obs.: as linhas de 74 a 82 foram que eu inclui. A ideia é de utilizar a função da pagina queryOracle.php consultar no banco oracle os mesmos chamados da consulta da linha 17: $sql = " (essa query busca no BD local)
<?php

set_time_limit(0);


require_once 'autenticacao.php';
require_once 'vantiveAPI.php';
require_once 'atualizaWorkFlow.php';
require_once 'queryOracle.php';

if( !temPerfil('relatorios') )
    morrer('Acesso negado');

require_once('relatorios.entrada.php');
require_once('vantiveAPI.php');

$sql = "
    SELECT
        chamado.sq_chamado,
        sistema.no_class3,
        group_concat(regional.no_regional order by regional.no_regional separator '<br />') as regional,
        chamado.nu_chamado,
        sistema.no_class4,
        chamado.fg_aberto,
        chamado.tx_descricao,
        chamado.sq_site,
        site.no_site,
        (select fila.no_fila from fila, workflow
            where fila.sq_fila = workflow.sq_fila and workflow.nu_chamado = chamado.nu_chamado
            order by workflow.dt_data desc limit 1) as fila,
        (select fila.sq_fila from fila
            where fila.no_fila = fila) as sq_fila,
        date_format(chamado.dt_abertura,'%d') as dabertura,
        date_format(chamado.dt_abertura,'%H:%i') as habertura,
        if( chamado.fg_aberto,
            'Em aberto',
            if( date(chamado.dt_abertura) = date(chamado.dt_fechamento),
                date_format(chamado.dt_fechamento,'%H:%i'),
                date_format(chamado.dt_fechamento,'%d/%m %H:%i')
                )
            ) as fechamento,
        chamado.hr_sla,
        if( chamado.fg_aberto,
            timediff(now(),chamado.dt_abertura),
            timediff(chamado.dt_fechamento,chamado.dt_abertura)
            ) as duracao,
        if( chamado.fg_aberto,
            if(unix_timestamp(now()) - unix_timestamp(chamado.dt_abertura) > chamado.hr_sla * 3600,1,0),
            if(unix_timestamp(chamado.dt_fechamento) - unix_timestamp(chamado.dt_abertura) > chamado.hr_sla * 3600,1,0)
            ) as estourado
    FROM chamado
        left join chamado_regional using(nu_chamado)
        left join regional on chamado_regional.sq_regional = regional.sq_regional
        left join sistema on chamado.sq_sistema = sistema.sq_sistema
        left join site on chamado.sq_site = site.sq_site
    WHERE 1 and chamado.fg_excluido is null and (chamado.fg_publico or chamado.fg_critico)"
     . ($data ? " and date(chamado.dt_abertura) >= '$data'" : "")
     . ($data2 ? " and date(chamado.dt_abertura) <= '$data2'" : "")
     . ($andamento == 1 ? " and fg_aberto = 0" : ($andamento == 2 ? " and fg_aberto = 1" : ""))
     . ($class3 ? " and sistema.no_class3 = '$class3'" : "")
     . ($class4 ? " and sistema.no_class4 = '$class4'" : "")
     . ($status ? " and sistema.status = '$status'" : "")
     . ($sq_regional ? " and chamado_regional.sq_regional = '$sq_regional'" : "")
     . ($no_site ? " and site.no_site = '$no_site'" : "") 
     . " GROUP BY chamado.sq_chamado "
     . " HAVING 1"
     . ($sla == 1 ? " and estourado = 0" : ($sla == 2 ? " and estourado = 1" : ""))
     . ($sq_fila ? " and sq_fila = '$sq_fila'" : "")
     . ($sq_site ? " and sq_site = '$sq_site'" : "")
     . " ORDER BY chamado.dt_abertura";

$res = mysql_query($sql) or morrer("Erro na query: \n $sql \n\n " . mysql_error());

$acao = queryOracle("
    SELECT 
      swhdcaseid, 
      swnote,
    FROM SWBAPPSP.Sw_Hd_Case 
    where swhdcaseid = $nu_chamado
    ");

$uacao = queryOracle($acao); 

require_once 'relatorios.head.php';
?>
<table>
    <thead>
    <tr>
        <th>Dia
        <th>Sistema
        <th>Regional
        <th>Site        
        <th>Tipo
        <th>Chamado
        <th>Abertura
        <th>SLA
        <th>Fechamento
        <th>Tempo afetado
        <th>Fila
        <th>A&ccedil;&atilde;o        
        <th>Descrição
    <tbody>
    <?
    
    $i = 0;
    while( $row = mysql_fetch_assoc($res) ){
        if( $i == 0 ){ $cor = "par"; }else{ $cor = "impar"; }
        ?>
    <tr>
        <td class="<?=$cor;?> "><div align="center"><?=$row['dabertura'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['no_class3'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['regional'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['no_site'];?></div>    
      <td class="<?=$cor;?> "><div align="center"><?=$row['no_class4'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['nu_chamado'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['habertura'];?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['hr_sla'];?>:00</div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['fechamento'];?></div>
      <td class="<?=$cor;?> <?=$row['estourado']?"vermelho":"";?>"><div align="center"><?=substr($row['duracao'],0,-3);?></div>
      <td class="<?=$cor;?> "><div align="center"><?=$row['fila'];?></div>
        <td class="<?=$cor;?> "><div align="center"><?=$u_acao['uacao'];?></div>      
        <td class="<?=$cor;?> "><div align="center"><?=htmlentities($row['tx_descricao']);?></div>
        <?
        $i = pow($i-1,2);
    }
    ?>
</table>
<?
require_once 'relatorios.rodape.php';
?>

O que está ocorrendo agora é que ele não traz nenhum registro...

Desde já agradeço ajuda de todos.

Editado por Martinsrj
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...