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
