Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle:SQL dinâmico


Aqui está um exemplo simples que analisa as tabelas em seu próprio 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 ver as tabelas de outra pessoa, você precisará usar dba_tables quando você começou a tentar, ou mais provavelmente all_tables pois isso deve excluir tabelas das quais você não pode contar, mas você também precisará especificar o proprietário no count declaração.

Normalmente você gostaria de usar variáveis ​​de ligação para evitar injeção de SQL, mas você tem que especificar nomes de objetos com concatenação como esta.

Outra coisa a ser observada é um erro que você teve em sua consulta, mas que Egor agora removeu da pergunta. A string SQL dinâmica que você executa não deve ser terminada por um ponto e vírgula (; ).