Cómo escribir sentencias SQL dinámicas de PostgreSQL
El lenguaje PL/pgSQL de PostgreSQL admite declaraciones SQL dinámicas (ECPG admite declaraciones que se ejecutan inmediatamente). Sin embargo, es importante recordar que el lenguaje PL/pgSQL admite declaraciones SQL dinámicas. PL/pgSQL es un lenguaje estructurado en bloques que comienza y termina con inicio... fin. Esto significa que para ejecutar una instrucción SQL dinámica, se debe colocar en un bloque inicial... final. En SQL Server, esto es fácil de hacer, podemos ejecutar sentencias SQL dinámicas como esta: ejecutar?sp_executesql?N'select?1?as?val'
En PostgreSQL, ni se te ocurra . Por supuesto, el método de SQL Server para ejecutar tales sentencias SQL dinámicas tiene sus limitaciones e inconvenientes.
En PL/pgSQL, el formato para ejecutar SQL dinámico es el siguiente (extraído de la documentación): EXECUTE?command-string?[?INTO?[STRICT]?target?]?[?USING? expresión?[, ?...?]] ?];
Entre ellos,
command-string es la instrucción SQL dinámica que se ejecutará (debe recordar: esta es una declaración SQL declaración, no declaración PL/pgSQL, declaraciones como levantar aviso no se pueden utilizar);
La cláusula INTO asigna el valor de la consulta SQL a la variable especificada por INTO;
La cláusula USING cláusula asigna el valor al comando anterior -Variable de sustitución en cadena ($1, $2, ...).
Ejemplo: ¿hacer?$$
declarar
v_c1?integer;
v_c2?integer;
comenzar
ejecutar?'select?count(*)?as?c1,?as idx union select 11 como idx union select 21 as idx) s donde idx gt;?$1'?
en?v_c1,?v_c2
usando?10;
¿subir?