EXECUTE y format() en SQL
SQL armado en tiempo de ejecución, con format() haciendo el quoting que un pegote arruinaría.
-- EXECUTE runs SQL built at run time; format() quotes it safely.
-- Dynamic strings stay lowercase: they are data here, not statements.
DO $$
DECLARE
tally BIGINT;
chosen TEXT := 'products';
BEGIN
EXECUTE format('select count(*) from %I', chosen)
INTO tally;
RAISE NOTICE '% holds % rows', chosen, tally;
END;
$$;
Cómo funciona
format('... %I', chosen)entrecomilla el identificador con seguridad — la inyección no tiene costura.EXECUTE ... INTO tallycorre la cadena armada y captura el resultado.- La cadena dinámica queda en minúsculas: aquí es dato, no sentencia.
Palabras clave y builtins usados aquí
BEGINBIGINTDECLAREDOENDEXECUTEINTOTEXT
El intento, en números
- Líneas
- 12
- Caracteres a escribir
- 314
- Tokens
- 39
- Ritmo de tres estrellas
- 60 tpm
Al ritmo de tres estrellas de 60 tokens por minuto, este intento toma unos 39 segundos.
Paso 4 de 4 en Consultas en el código; paso 16 de 23 en Procedimientos almacenados de PostgreSQL.