Buenas,

Datos: Evolution 1.10.0.5 - Base de datos: Oracle 11gR2


Servidor: Windows server 2012

Me esta presentando el siguiente error al generar una consulta de excel

Oracle.ManagedDataAccess.Client.OracleException (0x00000593): ORA-01427: la subconsulta de una sola fila devuelve más de una fila
 at OracleInternal.ServiceObjects.OracleCommandImpl.VerifyExecution(OracleConnectionImpl connectionImpl, Int32& cursorId, Boolean bThrowArrayBindRelatedErrors, OracleException& exceptionForArrayBindDML, Boolean& hasMoreRowsInDB, Boolean bFirstIterationDone)
 at OracleInternal.ServiceObjects.OracleCommandImpl.ExecuteReader(String commandText, OracleParameterCollection paramColl, CommandType commandType, OracleConnectionImpl connectionImpl, OracleDataReaderImpl& rdrImpl, Int32 longFetchSize, Int64 clientInitialLOBFS, OracleDependencyImpl orclDependencyImpl, Int64[] scnForExecution, Int64[]& scnFromExecution, OracleParameterCollection& bindByPositionParamColl, Boolean& bBindParamPresent, Int64& internalInitialLOBFS, OracleException& exceptionForArrayBindDML, Boolean isDescribeOnly, Boolean isFromEF)
 at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
 at Oracle.ManagedDataAccess.Client.OracleDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
 at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet)
 at Microsoft.Practices.EnterpriseLibrary.Data.Database.DoLoadDataSet(IDbCommand command, DataSet dataSet, String[] tableNames)
 at Microsoft.Practices.EnterpriseLibrary.Data.Database.LoadDataSet(DbCommand command, DataSet dataSet, String[] tableNames)
 at EntLibContrib.Data.ManagedOdpNet.OracleDatabase.LoadDataSet(DbCommand command, DataSet dataSet, String[] tableNames) in c:\VH4\Utils\EntLibContrib.Data.OdpNet\OracleDatabase.cs:line 547
 at Microsoft.Practices.EnterpriseLibrary.Data.Database.ExecuteDataSet(DbCommand command)
 at EntLibContrib.Data.ManagedOdpNet.OracleDatabase.ExecuteDataSet(DbCommand command) in c:\VH4\Utils\EntLibContrib.Data.OdpNet\OracleDatabase.cs:line 513
 at Aseinfo.Infrastructure.Services.ExcelTableService.GetDataTable(Table excelTable, IEnvironmentVariables environmentVariables, IParameter[] parameters) in C:\vh4\Infrastructure\Services\Excel\ExcelTableService.cs:line 134
 at Aseinfo.Infrastructure.Services.ExcelTableService.GenerateXMLWorksheet(Table excelTable, IEnvironmentVariables environmentVariables, IParameter[] parameters) in C:\vh4\Infrastructure\Services\Excel\ExcelTableService.cs:line 75
 at Aseinfo.Infrastructure.Controllers.ConsultasExcelController.DescargarConsultaGenerada(Int32 codigo, Nullable`1 fecha, String titulo, String subtitulo, List`1 qbFields, Boolean mostrandoEnDialogo) in C:\vh4\Infrastructure\Controllers\ConsultasExcelController.cs:line 555

El query de la vista es el siguiente:

CREATE OR REPLACE FORCE VIEW EVODATA.WRP_EVA_NECESI_CAPAC
(VIS_CODCIA, VIS_CODDIR, VIS_CODPEV, VIS_CODEXP_EVALUADO, VIS_CODEXP_NOMBRE, 
 VIS_CODPLZ, VIS_CODUNI, VIS_CODEXP_EVALUADOR, VIS_CODEXP_EVALUADOR_NOMBRE, VIS_CODPLZ_EVALUADOR, 
 TEV_DESCRIPCION, NCE_DESCRIPCION, NCE_FECHA, NCE_RECURSOS)
AS 
SELECT PlazaEvaluado.plz_codcia vis_codcia,
       esq_coddir vis_coddir,
       pev_codigo vis_codpev,
       ExpedienteEvaluado.exp_codigo vis_codexp_evaluado,
       ExpedienteEvaluado.exp_codigo vis_codexp_nombre,
       PlazaEvaluado.plz_codigo vis_Codplz,
       PlazaEvaluado.plz_coduni vis_coduni,
       ExpedienteEvaluado.exp_codigo vis_codexp_evaluador,
       ExpedienteEvaluado.exp_codigo vis_codexp_evaluador_nombre,
       plazaevaluador.plz_codigo vis_codplz_evaluador,
       tev_descripcion,
       nce_descripcion,
       nce_fecha,
       nce_recursos
  FROM EVA_NCE_NECESIDADES_CAP_EVAL
  JOIN eva_eva_evaluaciones ON eva_codigo = nce_codeva
  JOIN cap_tev_tipos_eventos ON tev_codigo = nce_Codtev
  JOIN eva_con_consolidaciones ON con_codigo = eva_codcon
  JOIN eva_pev_periodos ON pev_codigo = con_Codpev
  JOIN eva_esq_esquemas ON esq_codigo = Eva_codesq
  JOIN exp_emp_empleos EmpleoEvaluado ON EmpleoEvaluado.emp_codigo = con_codemp
  JOIN exp_exp_expedientes ExpedienteEvaluado ON ExpedienteEvaluado.exp_Codigo = EmpleoEvaluado.emp_codexp
  JOIN eor_plz_plazas PlazaEvaluado ON PlazaEvaluado.plz_Codigo = EmpleoEvaluado.emp_codplz
  -- evaluador
  JOIN exp_emp_empleos EmpleoEvaluador ON EmpleoEvaluador.emp_codigo = eva_codemp_evaluador
  JOIN exp_exp_expedientes ExpedienteEvaluador ON ExpedienteEvaluador.exp_Codigo = EmpleoEvaluador.emp_codexp
  JOIN eor_plz_plazas PlazaEvaluador ON PlazaEvaluador.plz_Codigo = EmpleoEvaluador.emp_codplz;

Y el Query generado por el evolution en la consulta de excel es el siguiente:

SELECT DISTINCT nce_descripcion,nce_fecha,nce_recursos,tev_descripcion,vis_Codexp_nombre,(SELECT exp_codigo FROM (
select exp_codigo, exp_nombres_apellidos
  from exp_emp_empleos
  join exp_exp_expedientes on exp_codigo = emp_codexp
  join eor_plz_plazas on plz_codigo = emp_codplz
  join eor_cia_companias on cia_codigo = plz_codcia
where plz_codcia = 1
and (exists(select null from table(sco.permiso_emp_x_jerarquia_tabla('admin')) v where emp_codigo = codemp)  
     or exists (select null from table(sco.permiso_empleo_tabla('admin')) where emp_codigo = column_value)
     or exists (select 1
                from eva_eva_evaluaciones
                where EXISTS (select 1
                        from sec_usr_users
                        join sec_eus_expediente_usuario on usr_codigo = eus_codusr
                        join exp_emp_empleos on emp_codexp = eus_codexp
                        where usr_username = 'admin'
                          and emp_codigo = eva_codemp_evaluador)
                  and emp_codigo = eva_codemp_evaluador))
) VLI WHERE VLI.exp_codigo = vis_Codexp_nombre) vis_Codexp_nombre_D_,vis_Codplz,(SELECT plz_nombre FROM (
    select plz_codigo, plz_nombre from eor_plz_plazas join eor_cia_companias on cia_codigo = plz_codcia where cia_codgrc = 1
  ) VLI WHERE VLI.plz_codigo = vis_Codplz) vis_Codplz_D_,vis_codexp_evaluado,vis_codexp_evaluador_nombre,(SELECT exp_codigo FROM (
select exp_codigo, exp_nombres_apellidos
  from exp_emp_empleos
  join exp_exp_expedientes on exp_codigo = emp_codexp
  join eor_plz_plazas on plz_codigo = emp_codplz
  join eor_cia_companias on cia_codigo = plz_codcia
where plz_codcia = 1
and (exists(select null from table(sco.permiso_emp_x_jerarquia_tabla('admin')) v where emp_codigo = codemp)  
     or exists (select null from table(sco.permiso_empleo_tabla('admin')) where emp_codigo = column_value)
     or exists (select 1
                from eva_eva_evaluaciones
                where EXISTS (select 1
                        from sec_usr_users
                        join sec_eus_expediente_usuario on usr_codigo = eus_codusr
                        join exp_emp_empleos on emp_codexp = eus_codexp
                        where usr_username = 'admin'
                          and emp_codigo = eva_codemp_evaluador)
                  and emp_codigo = eva_codemp_evaluador))
) VLI WHERE VLI.exp_codigo = vis_codexp_evaluador_nombre) vis_codexp_evaluador_nombre_D_,vis_codpev,(SELECT pev_descripcion FROM (
    select pev_codigo,pev_descripcion from eva_pev_periodos where pev_codgrc= 1
) VLI WHERE VLI.pev_codigo = vis_codpev) vis_codpev_D_,vis_codplz_evaluador,(SELECT plz_nombre FROM (
    select plz_codigo, plz_nombre from eor_plz_plazas join eor_cia_companias on cia_codigo = plz_codcia where cia_codgrc = 1
  ) VLI WHERE VLI.plz_codigo = vis_codplz_evaluador) vis_codplz_evaluador_D_,vis_coduni,(SELECT uni_descripcion FROM (
    select uni_codigo, uni_descripcion from eor_uni_unidades where uni_codgrc = 1 and uni_estado = 'Vigente') VLI WHERE VLI.uni_codigo = vis_coduni) vis_coduni_D_ FROM wrp_eva_necesi_capac WHERE (vis_codcia = 1)

Dicha consulta de excel para el criterio de filtrado se utiliza el Periodo de la evaluacion alt text

asked 23 Aug '16, 14:20

Luis%20Caballero's gravatar image

Luis Caballero
(suspended)
accept rate: 0%

edited 23 Aug '16, 14:34

Fernando%20Paz's gravatar image

Fernando Paz ♦♦
17.3k81635


Es un error normal en Oracle cuando se tiene un subquery que regresa más de un registro y se utiliza para obtener un único valor.

Deberías ejecutar este query en el SQL Developer, Toad o cualquier otra herramienta de conexión a Oracle, y verificar cual es el subquery que está asumiendo que siempre debería retornar un registro y en la realidad retorna más de uno.

Lo más probable es que sea una de las listas de valores que se utilizan para encontrar la descripción de in código, no debe estar considerando que puede retornar más de un registro.

link

answered 23 Aug '16, 14:29

Fernando%20Paz's gravatar image

Fernando Paz ♦♦
17.3k81635
accept rate: 51%

edited 23 Aug '16, 14:36

Gracias por la respuesta Sr. Fernando,

El subquery que puede estar afectando puede ser el select pev_codigo,pev_descripcion from eva_pev_periodos where pev_codgrc= 1

Como se puede controlar este error, el cliente desea no colocar nada para que asi le traiga la informacion de todos los periodos.

alt text

Quedo a la espera de sus comentarios

(23 Aug '16, 17:11) Luis Caballero Luis%20Caballero's gravatar image

No creo que esa lista de valores sea la causante, porque se está incluyendo el código del período:

(select pev_descripcion from (select pev_codigo, pev_descripcion from eva_pev_periodos where pev_codgrc=1) vli where vli.pev_codigo = vis_codpev)

esta es la expresión completa que utiliza el where de la generación de la lista

(26 Aug '16, 10:08) Fernando Paz ♦♦ Fernando%20Paz's gravatar image
Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Evolution en BitBucket

En este sitio puede acceder al código fuente, centro de descargas y reportar bugs, propuestas y mejoras para Evolution.

Evolution en JIRA

En este sitio puedes sugerir nueva funcionalidad para Evolution, o puedes votar por la funcionalidad ya propuesta por otros usuarios.

Tags:

×34
×1

Asked: 23 Aug '16, 14:20

Seen: 3,188 times

Last updated: 26 Aug '16, 10:08

[Acerca de] [Preguntas Frecuentes] [Privacidad] [Soporte] [Contacto]
Copyright 2013-2018. Asesores en Informática