ExecuteSQL
Ejecuta una secuencia de consulta SQL para la ocurrencia de la tabla especificada en un archivo de FileMaker Pro.
Formato
ExecuteSQL ( consultaSql; separadorCampo; separadorFila {; argumentos... } )
Parámetros
consultaSql
: una secuencia SQL SELECT. La secuencia puede incluirse en una cláusula Union que combine los resultados de dos consultas. La secuencia puede incluir parámetros (dinámicos) SQL generados mediante programación que indiquen en qué parte de la consulta se utilizarán los argumentos opcionales. Utilice el carácter de signo de interrogación (?) para especificar un parámetro dinámico.
separadorCampo
: la cadena de caracteres utilizada como separador entre los campos incluidos en los resultados. Si se especifica una cadena vacía, el separador será una coma. El separador de campo no se muestra tras el último campo de los resultados.
separadorFila
: la cadena de caracteres utilizada como separador entre los registros incluidos en los resultados. Si se especifica una cadena vacía, el separador será un retorno de carro. El separador de fila no se muestra tras la última fila de los resultados.
argumentos
: una o varias expresiones separadas por punto y coma (;) que se evalúan y utilizan como valores de los parámetros dinámicos en la secuencia de consulta.
Tipo de datos devuelto
texto
Se origina en
12.0
Descripción
ExecuteSQL permite ejecutar secuencias SQL SELECT que contienen parámetros dinámicos para realizar una consulta de forma segura en las bases de datos de FileMaker Pro a fin de evitar las vulnerabilidades de seguridad debido a ataques de introducción de código.
ExecuteSQL no reconoce las relaciones creadas en FileMaker Pro, lo que le ofrece la flexibilidad de definir relaciones en secuencias SQL y recuperar datos de cualquier tabla independientemente del contexto de la presentación.
ExecuteSQL no se puede utilizar con secuencias SQL que modifiquen datos o el esquema de la base de datos (como, por ejemplo, los comandos Insertar en o Eliminar tabla).
Cuando emplea múltiples parámetros dinámicos en consultaSql
, el primer signo de interrogación se reemplaza por el primer parámetro de argumentos
, el segundo por el segundo, y así sucesivamente.
Si se produce un error durante el análisis o la ejecución de la consulta, ExecuteSQL devuelve ?. Para recibir un mensaje de error más detallado, use la función función ExecuteSQLe.
Notas
- Para aplicar el formato correcto a las fechas en una consulta SQL, utilice la secuencia DATE. Si no usa la secuencia DATE, ExecuteSQL trata las fechas como cadenas literales.
- FileMaker Pro devuelve los datos de fecha, hora y número en formato Unicode/SQL, no con la configuración local del sistema operativo o del archivo.
- ExecuteSQL acepta solo los formatos de hora y fecha ISO de sintaxis SQL-92 sin corchetes. ExecuteSQL no acepta las constantes de fecha y hora, hora y fecha de formato ODBC/JDBC con corchetes.
- FileMaker SQL utiliza el tipo de ordenación binario Unicode, que es diferente al tipo de ordenación de FileMaker Pro utilizado con la ordenación en función del idioma o la ordenación predeterminada neutra respecto al idioma.
- Para obtener más información sobre la sintaxis de la secuencia SELECT, las secuencias SQL compatibles, las expresiones y las funciones de catálogo, consulte la Guía de ODBC y JDBC de FileMaker y la Referencia de SQL de FileMaker.
- La función ExecuteSQL usa secuencias SQL SELECT para consultar tablas en fuentes de datos de FileMaker, no en fuentes de datos ODBC. Para ejecutar SELECT y otras secuencias SQL admitidas en fuentes de datos ODBC, utilice el paso de guión Ejecutar SQL.
Ejemplo 1
Imagine que una base de datos contiene dos tablas, Empleados y Salarios, que están relacionadas mediante el campo IDEmp.
Nota Los campos Empleados::IDEmp, Salarios::IDEmp y Salarios::Salario son numéricos.
Puede ejecutar la función ExecuteSQL para devolver un valor de campo de un registro específico sin modificar el registro actual o el conjunto encontrado.
ExecuteSQL ( "SELECT Departamento FROM Empleados WHERE IDEmp = 1"; ""; "" )
devuelve Desarrollo, independientemente del registro, el conjunto encontrado o la presentación actuales.
Ejemplo 2
En el ejemplo 1, imagine que desea añadir un campo a la tabla Empleados para mostrar el porcentaje del salario de un empleado en relación con el total de los salarios de un departamento. Aunque podría utilizar un cálculo en FileMaker Pro para generar este valor, puede usar la función ExecuteSQL para especificar esta consulta mediante parámetros dinámicos. En el ejemplo siguiente, se utilizan alias de tabla para la tabla Empleados (E
) y la tabla Salarios (S
) al especificar campos (S.Salario
, E.IDEmp
, y S.IDEmp
).
Defina un campo de cálculo (Porcentaje salarial del dep.) en la tabla Empleados, luego utilice la función ExecuteSQL para especificar una sentencia de consulta en el siguiente cálculo:
Round (
100 * Salarios::Salario / ExecuteSQL (
"SELECT SUM (S.Salario)
FROM Empleados E
JOIN Salarios S
ON E.IDEmp = S.IDEmp
WHERE E.Departamento = ?";
""; ""; Empleados::Departamento
) ;
2 )
Nota Dado que este cálculo necesita obtener el salario del empleado de la tabla Salarios (Salarios::Salario), debe crear una relación entre los campos Empleados::EmpID y Salarios::EmpID en el gráfico de relaciones (consulte Crear y modificar relaciones). Por el contrario, la función ExecuteSQL no utiliza el gráfico de relaciones. Así que en este ejemplo, la cláusula JOIN establece la relación utilizada por la sentencia SELECT en ExecuteSQL.
Para cada registro de empleado, el campo Porcentaje salarial del dpto. calcula el porcentaje del salario del empleado en relación con la suma de los salarios del departamento del empleado.
Empleados | |||
---|---|---|---|
IDEmp | Apellidos | Departamento | Porcentaje del salario del dpto. |
1 | Smith | Desarrollo | 52,97 |
2 | Ogawa | Desarrollo | 47,03 |
3 | Durand | Calidad | 48,86 |
4 | García | Calidad | 51,14 |
5 | Mehmet | Documentación | 100 |
6 | Ferrini | Marketing | 100 |