Estaba revisando un código antiguo que otro desarrollador de mi organización escribió en años anteriores. Mientras trataba de mejorar este código, descubrí que la consulta que utiliza tenía un problema muy grave.El enigma de la consulta rota de trabajo
OdbcDataAdapter financialAidDocsQuery =
new OdbcDataAdapter(
@"SELECT a.RRRAREQ_TREQ_CODE,
b.RTVTREQ_SHORT_DESC,
a.RRRAREQ_TRST_DESC,
RRRAREQ_STAT_DATE,
RRRAREQ_EST_DATE,
a.RRRAREQ_SAT_IND,
a.RRRAREQ_SBGI_CODE,
b.RTVTREQ_PERK_MPN_FLAG,
b.RTVTREQ_PCKG_IND,
a.RRRAREQ_MEMO_IND,
a.RRRAREQ_TRK_LTR_IND,
a.RRRAREQ_DISB_IND,
a.RRRAREQ_FUND_CODE,
a.RRRAREQ_SYS_IND
FROM FAISMGR.RRRAREQ a, FAISMGR.RTVTREQ b
WHERE a.RRRAREQ_TREQ_CODE = b.RTVTREQ_CODE
and a.RRRAREQ_PIDM = :PIDM
AND a.RRRAREQ_AIDY_CODE = :AidYear ",
this.bannerOracle);
financialAidDocsQuery.SelectCommand.Parameters.Add(":PIDM", OdbcType.Int, 32).Value = this.pidm;
financialAidDocsQuery.SelectCommand.Parameters.Add(":AidYear", OdbcType.Int, 32).Value = this.aidYear;
DataTable financialAidDocsResults = new DataTable();
financialAidDocsQuery.Fill(financialAidDocsResults);
FADocsGridView.DataSource = financialAidDocsResults;
FADocsGridView.DataBind();
El problema es que la columna a.RRRAREQ_TRST_DESC
no existe. Un hecho que aprendes muy rápido cuando lo ejecutas en Oracle SQL Developer.
Lo extraño?
Este código funciona.
La vista de cuadrícula se une correctamente. (No intenta vincularse a ese campo.) Y ha estado en producción durante años.
Entonces, mi pregunta es ... ¿por qué? Nunca he visto funcionar una mala consulta. Nunca he visto a Oracle permitirlo o un proveedor de datos hackearlo.
¿Alguien tiene alguna idea de lo que está pasando aquí?
Extraño ... no siempre existe RRRAREQ_TRST_DESC? –
Esos nombres de columna hacen daño a mi cerebro –
¿causa una excepción que se maneje, y algo ** else ** está haciendo una consulta válida y vinculando eso? ¿Estás seguro de que es realmente utilizado? no es un código vestigal que no está referenciado en realidad? –