ORA-03113使用PDO

时间:2018-01-05 19:01:57

标签: php oracle pdo

我有一个用PHP制作的内部Intranet,我们在这里有Oracle服务器,但它已被移动到云服务器。因为我有问题。

如果我从PHP执行一个简单的查询,如“select * from empresas”,它执行正常,但如果我尝试更复杂的查询,使用一些连接和where子句,它会给出错误ORA-03113。试图从PL / SQL Developer执行,这个特定的查询需要5秒钟才能执行,它只返回15行。

我无法访问Oracle日志,因为这个云只是我们的一个实例。

我认为可能是PDO配置或者我需要配置/检查以解决此问题的版本,只是不知道如何启动。

旧的Oracle服务器是Windows服务器,Oracle版本是12.云是Oracle 11,是Linux服务器。

以下是查询:

`SELECT distinct
  ct.descricao MARCA, 
  e.nome EMPRESA, 
  vi.cod_item CODIGO, 
  i.descricao DESCRICAO, 
  igi.cod_grupo_interno CODTIPO, 
  igi.descricao TIPO, 
  ic.cod_curva CLASSEABC,
  v.cod_cliente COD_CLIENTE, 
  cd.nome NOME_CLIENTE,
  ci.descricao CID_CLIENTE, 
  ci.uf UF_CLIENTE,
  CASE WHEN cd.cpf<>' ' THEN 'F' ELSE 'J' END TIPO_CLIENTE,
  cl.descricao DESCTP_CLIENTE,
  SUM(vi.qtde) QTDE, 
  vi.preco_unitario PPUBLICO, 
  SUM(vi.qtde * vi.preco_unitario) FAT_BRT, 
  SUM(vi.TOTAL_DESCONTOS) DESCONTO, 
  SUM(vi.preco_liquido_final) FAT_LIQ, 
  SUM(vi.qtde * vi.preco_contabil) CUSTO, 
  SUM(vi.base_icms) BASE_ICMS, 
  SUM(vi.valor_icms) VLR_ICMS, 
  '0' VLR_COP,
  '0' ACRESCIMO, 
  SUM(vi.valor_pis + vi.valor_cofins) VLR_PCOF,
  SUM(vi.valor_ipi) VLR_IPI, 
  NULL VLR_MARGEM,
  v.controle|| '-' || v.serie NF, 
  TO_CHAR(v.emissao, 'DD/MM/YYYY') DTNF, 
  n.cod_natureza CODNATUREZA, 
  n.descricao NATUREZA, 
  eu.id_funcionario VENDEDOR, 
  eu.nome_completo FUNCIONARIO, 
  eu.nome LOGIN, 
  eu.cod_funcao TIPO_FUN, 
  'N' STATUS,
  v.numero_os OS,
  v.chassi_resumido VEICULO,
  cd.bairro BAIRRO_CLIENTE, 
  v.controle|| '-' || v.serie NOTA,
  pg.descricao CONDICAO_PG, 
  pg.cod_forma_pgto COD_CONDICAO, 
  os.tipo CD_TP_OS, 
  ost.descricao DS_TP_OS,
  '0' PERCUSTOOPER,
  ed.cod_empresa_departamento DEPARTAMENTO, 
  ic.custo_fornecedor VLRREPOSICAO
FROM vendas v
INNER JOIN venda_itens vi ON vi.cod_empresa = v.cod_empresa and vi.controle = v.controle
INNER JOIN itens_custos ic ON ic.cod_empresa = v.cod_empresa AND ic.cod_item = vi.cod_item AND ic.cod_fornecedor = vi.cod_fornecedor
INNER JOIN itens_fornecedor if ON if.cod_item = vi.cod_item AND if.cod_fornecedor = vi.cod_fornecedor
INNER JOIN fornecedor_estoque fe ON fe.cod_fornecedor = if.cod_fornecedor
INNER JOIN itens i ON i.cod_item = vi.cod_item
INNER JOIN itens_grupo_interno igi ON igi.cod_grupo_interno = i.cod_grupo_interno
INNER JOIN empresas e ON e.cod_empresa = v.cod_empresa
INNER JOIN empresas_usuarios eu ON eu.nome = v.vendedor
INNER JOIN empresas_funcoes ef ON ef.cod_funcao = eu.cod_funcao
INNER JOIN empresas_departamentos ed ON ed.cod_empresa = v.cod_empresa AND ed.cod_empresa_departamento = v.cod_empresa_departamento
INNER JOIN parm_sys p ON p.cod_empresa = v.cod_empresa
INNER JOIN concessionaria_tipo ct ON ct.cod_tipo_concessionaria = p.tipo_concessionaria 
INNER JOIN cliente_diverso cd ON cd.cod_cliente = v.cod_cliente AND cd.cod_empresa = v.cod_empresa
INNER JOIN clientes_tipo cl ON cl.cod_tipo = cd.cod_tipo
INNER JOIN cidades ci ON ci.cod_cidades = cd.cod_cidades
LEFT JOIN pagamento_venda pv ON pv.controle = v.controle AND pv.serie = v.serie
LEFT JOIN forma_pgto pg ON pg.cod_forma_pgto = pv.cod_forma_pgto
LEFT JOIN os ON os.cod_empresa = v.cod_empresa and os.numero_os = v.numero_os
LEFT JOIN os_tipos ost ON ost.tipo = os.tipo
LEFT JOIN natureza n ON n.cod_natureza = vi.cod_natureza and n.grupo = vi.grupo 
LEFT JOIN operacoes ops ON ops.cod_empresa = v.cod_empresa and ops.cod_operacao = v.cod_operacao
WHERE v.status <> '1' AND v.total_produtos > 0
AND (ops.grupo is null or ops.grupo = 2)
AND v.emissao >= to_date(SYSDATE-20)
AND i.COD_GRUPO_INTERNO <> 13
GROUP BY ct.descricao, e.nome, vi.cod_item, i.descricao, igi.cod_grupo_interno, igi.descricao, ic.cod_curva, v.cod_cliente, 
cd.nome, ci.descricao, ci.uf, CASE WHEN cd.cpf<>' ' THEN 'F' ELSE 'J' END, cl.descricao, vi.preco_unitario, vi.preco_contabil, 
v.margem, v.controle|| '-' || v.serie, TO_CHAR(v.emissao, 'DD/MM/YYYY'), n.cod_natureza, n.descricao, eu.id_funcionario, 
eu.nome_completo, eu.nome, eu.cod_funcao, v.numero_os,  v.chassi_resumido, cd.bairro, v.controle|| '-' || v.serie, 
pg.descricao,pg.cod_forma_pgto, os.tipo, ost.descricao, ed.cod_empresa_departamento, ic.custo_fornecedor`

1 个答案:

答案 0 :(得分:0)

我向管理员询问了Oracle日志,它什么都没给我,管理员看到我的查询甚至到了那里,然后我尝试了很多东西,最后我的老板找到了答案。他看到问题是PHP通过我们与云连接的VPN连接发送的包的大小。所以解决方案(至少现在)是使用我们需要的大小添加到PDO连接:连接字符串上的“(DESCRIPTION =(SDU = 1400)...”。