Eu não tenho ideia do que exatamente você quer alcançar, mas talvez você possa tentar usar o pacote
DBMS_SQL
e seu método PARSE
. Isso funciona apenas com DML apenas declarações. Isso é o que o Oracle SQL Developer faz. Este parser pode ser usado para instruções DML também. Para PL/SQL, precisará de alguns ajustes. Até onde eu sei, ninguém gastou tempo suficiente para criar um analisador real de validação completa para o DDL da Oracle.
Aqui é um exemplo de como eu uso:
declare
l_cursor number := dbms_sql.open_cursor;
l_offset number := -1 ;
begin
begin
dbms_sql.parse( l_cursor, :st, dbms_sql.native );
exception when others then
l_offset := dbms_sql.last_error_position;
end;
dbms_sql.close_cursor( l_cursor );
:off := l_offset;
end;
Basta executar este bloco. Passe um parâmetro de entrada do tipo VARCHAR2(String) (máximo de 32 KB) e um parâmetro de saída NUMBER.