Skip to main content

Consultas que contienen SQL complejo

Escenario

Hay varias formas de consultar datos que no son compatibles con las definiciones de reportes. Un ejemplo es la fórmula de Haversine utilizada en la capa empresarial de FSG dentro de la solución de la aplicación Booking (Reserva). La consulta se encuentra en la pestaña Browse de la regla FSG-Data-Address HaversineFormula Connect-SQL.

haveshine
The haversine formula determines the great-circle distance between two points on a sphere given their latitude and longitudes. Important in navigation, it is a special case in spherical trigonometry, the law of haversines, that relates the sides and angles of spherical triangles.

Diseño de la solución

SELECT pyGUID AS "pyGUID",

Reference AS "Reference", IsFor AS "IsFor", Street AS "Street", City AS "City", State AS "State", PostalCode AS "PostalCode", Country AS "Country", Latitude AS "Latitude", Longitude AS "Longitude", Distance AS "Distance"

FROM

( SELECT z.pyguid AS pyGUID, z.reference AS Reference, z.isfor AS IsFor, z.street AS Street, z.city AS City, z.state AS State, z.postalcode AS PostalCode, z.country AS Country, z.latitude AS Latitude, z.longitude AS Longitude, p.radius, p.distanceunit * DEGREES(ACOS(COS(RADIANS(p.latpoint)) * COS(RADIANS(z.latitude)) * COS(RADIANS(p.longpoint - z.longitude)) + SIN(RADIANS(p.latpoint)) * SIN(RADIANS(z.latitude)))) AS Distance FROM {Class:FSG-Data-Address} AS z

JOIN ( /* estos son los parámetros de la consulta * SELECT {AddressPage.Latitude Decimal } AS latpoint, {AddressPage.Longitude Decimal } AS longpoint, {AddressPage.Distance Decimal } AS radius, {AddressPage.pyNote Decimal } AS distanceunit, {AddressPage.IsFor } AS isfor ) AS p ON p.isfor = z.isfor)

AS d WHERE distance <= radius ORDER BY distance LIMIT 15

Tenga en cuenta que el paso RDB-List en la actividad Code-Pega-List Connect_SQL_pr_fsg_data_address que origina las fuentes de la Página de Datos D_AddressesWithinDistance.

Es imposible definir este tipo de consulta mediante una definición de reportes porque tiene dos cláusulas SELECT FROM, una con el alias “z” y otra con el alias “d”. A diferencia de una definición de reportes, una regla de conexión de SQL carece de la capacidad de modificar dinámicamente sus condiciones de filtro cuando el valor de un parámetro está vacío. A menos que la definición de reportes esté configurada para generar un resultado “is null” cuando a un parámetro le falta un valor, Pega ignora la condición de filtro, lo cual, en algunos casos, puede ser riesgoso, a menos que se establezca un límite a la cantidad de filas devueltas.

Dentro de la consulta HaversineFormula, no es necesario generar las condiciones de filtro. No tiene sentido ejecutar la consulta a menos que se proporcione un valor para cada parámetro de consulta, con la excepción de la columna IsFor, actualmente “HOTEL” o “VENUE”.

Debe tener cuidado al usar las reglas de Connect-SQL, ya que es posible que los nombres de las columnas no se devuelvan como alias. Por ejemplo, a pesar de asignar un alias a la columna de código postal en minúsculas a PostalCode en mayúsculas y minúsculas, el nombre de la columna se devuelve en minúsculas, igual que existe en una base de datos de Postgres. 

En PostgreSQL, los nombres sin comillas no distinguen entre mayúsculas y minúsculas. Por ejemplo, Select Street as STREET or Street or street, proporciona el nombre de la columna “street” solamente. Si desea obtener el nombre de la columna “Street”, la columna debe colocarse entre comillas, por ejemplo: Select Street as “Street”.


This Topic is available in the following Module:

If you are having problems with your training, please review the Pega Academy Support FAQs.

¿Le ha resultado útil este contenido?

¿Quiere ayudarnos a mejorar este contenido?

We'd prefer it if you saw us at our best.

Pega Academy has detected you are using a browser which may prevent you from experiencing the site as intended. To improve your experience, please update your browser.

Close Deprecation Notice