sql >> Base de Datos >  >> RDS >> Oracle

Oracle:SQL dinámico

Aquí hay un ejemplo simple que mira tablas en su propio esquema:

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;
/

Para mirar las tablas de otra persona, deberá usar dba_tables como empezaste a probar, o más probablemente all_tables ya que eso debería excluir las tablas de las que no puede contar, pero también deberá especificar el propietario en el count declaración.

Normalmente, querrá usar variables de vinculación para evitar la inyección de SQL, pero debe especificar los nombres de los objetos con una concatenación como esta.

Otra cosa a tener en cuenta es un error que tuvo en su consulta, pero que Egor ahora eliminó de la pregunta. La cadena SQL dinámica que ejecuta no debe terminar con un punto y coma (; ).