sql >> Databáze >  >> RDS >> Oracle

Dynamický dotaz PLSQL

Dynamické SQL nevidí vaši proměnnou PL/SQL:musíte jí předat řetězec, který lze spustit v rozsahu enginu SQL. Musíte tedy zřetězit název tabulky se standardním textem příkazu:

query1 := 'SELECT max(c)  FROM ' || variable_name;

Také musíte vrátit výsledek dotazu do proměnné.

Funguje to takto (z vašeho příkladu jsem odstranil část nepotřebného kódu):

DECLARE    
 c_table VARCHAR2(40);
 c_obj VARCHAR2(20);
BEGIN
   for lrec in ( select a as tab_name from A )
   LOOP
      EXECUTE IMMEDIATE 'SELECT max(object_ref)  FROM ' || lrec.tab_name 
           into c_obj ;
      dbms_output.put_line('Maximum value: '|| lrec.tab_name
           || '='|| c_obj);
   END LOOP;
END;


  1. Hodnoty Linq to SQL DateTime jsou místní (Kind=Unspecified) - Jak to udělám UTC?

  2. Jak CHR() funguje v MariaDB

  3. Primární klíč SQL Kurz – Jak definovat primární klíč v databázi

  4. Dotaz PostgreSQL pro vrácení výsledků jako seznam oddělený čárkami