PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Czy jest jakiś sposób na wykonanie zapytania wewnątrz wartości ciągu (np. eval) w PostgreSQL?

Jeśli instrukcje, które próbujesz "ocenić", zawsze zwracają ten sam typ danych, możesz napisać funkcję eval(), która używa polecenia WYKONAJ wspomnianego przez Grzegorza.

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

Wtedy możesz zrobić coś takiego jak

SELECT eval('select 41') + 1;

Ale to podejście nie zadziała, jeśli instrukcje dynamiczne zwracają coś innego dla każdego wyrażenia, które chcesz ocenić.

Należy również pamiętać, że uruchamianie arbitralnych oświadczeń stwarza ogromne zagrożenie bezpieczeństwa. To, czy jest to problem, zależy od Twojego środowiska. Jeśli jest to używane tylko w interaktywnych sesjach SQL, nie stanowi to problemu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Createuser:nie można połączyć się z postgresem bazy danych:FATAL:rola tom nie istnieje

  2. PostgreSQL:Usuń bazę danych PostgreSQL za pomocą wiersza poleceń

  3. Używanie wielu schematów PostgreSQL z modelami Rails

  4. Jak zmodyfikować pola w nowym typie danych PostgreSQL JSON?

  5. Czym dokładnie jest GRANT USAGE ON SCHEMA?