Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle:dynamiczny SQL

Oto prosty przykład, który pokazuje tabele we własnym schemacie:

set serveroutput on
declare
    c number;
begin
    for r in (select table_name from user_tables) loop
        execute immediate 'select count(*) from ' || r.table_name
            into c;
        dbms_output.put_line(r.table_name ||': '|| c);
    end loop;
end;
/

Aby przeglądać tabele innych osób, musisz użyć dba_tables jak zacząłeś próbować, a raczej all_tables ponieważ powinno to wykluczyć tabele, z których nie możesz liczyć, ale musisz również określić właściciela w count oświadczenie.

Normalnie chciałbyś użyć zmiennych wiążących, aby uniknąć wstrzykiwania SQL, ale musisz określić nazwy obiektów za pomocą konkatenacji w ten sposób.

Coś innego, na co należy zwrócić uwagę, to błąd, który miałeś w zapytaniu, ale który Egor usunął z pytania. Wykonywany dynamiczny ciąg SQL nie powinien być zakończony średnikiem (; ).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle usuwa wiersze z wielu tabel

  2. java.sql.SQLRecoverableException:Karta sieciowa nie może nawiązać połączenia

  3. Jak przypisać licznik na podstawie warunku

  4. Group_concat odpowiednik funkcji MySQL w Oracle

  5. Jak wyeliminować godziny wolne od pracy w Oracle