sql >> Databáze >  >> RDS >> PostgreSQL

Existuje nějaký způsob, jak provést dotaz uvnitř hodnoty řetězce (jako eval) v PostgreSQL?

Pokud příkazy, které se pokoušíte "eval", vždy vracejí stejný datový typ, můžete napsat funkci eval(), která používá EXECUTE zmíněný Grzegorzem.

create or replace function eval(expression text) returns integer
as
$body$
declare
  result integer;
begin
  execute expression into result;
  return result;
end;
$body$
language plpgsql

Pak můžete udělat něco jako

SELECT eval('select 41') + 1;

Tento přístup však nebude fungovat, pokud vaše dynamické příkazy vrátí něco jiného pro každý výraz, který chcete vyhodnotit.

Mějte také na paměti, že to otevírá obrovské bezpečnostní riziko spuštěním libovolných příkazů. Pokud je to problém, závisí na vašem prostředí. Pokud se to používá pouze v interaktivních relacích SQL, pak to není problém.



  1. Funkce FLOOR() v Oracle

  2. Jak správně nastavit proměnnou ORACLE_HOME na Ubuntu 9.x?

  3. Jak svázat parametry s nezpracovaným dotazem DB v Laravelu, který se používá na modelu?

  4. Jak RLIKE funguje v MariaDB