Oracle
 sql >> Database >  >> RDS >> Oracle

Una query SQL Oracle può eseguire una query di stringa selezionata da una tabella?

In generale, questo non è un progetto particolarmente buono:l'archiviazione di SQL nelle tabelle e l'esecuzione dinamica introduce tutti i tipi di problemi di sicurezza e manutenzione.

Probabilmente è possibile (anche se è troppo tardi in un venerdì che è iniziato troppo presto per me per cercare di capirlo) eseguire una query XML davvero interessante sulla falsariga di questa query che esegue un conteggio(*) su ogni tabella nello schema che farebbe tutto questo in una query.

Per la stragrande maggioranza dei programmatori, tuttavia, l'approccio più semplice sarebbe quello di scorrere le query, eseguirle una alla volta e archiviare i risultati da qualche parte. Potenzialmente la variabile locale verrebbe aggiunta a una raccolta di conteggi, ad esempio.

FOR q IN (SELECT sql_text FROM query_table)
LOOP
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || q.sql_text || ')'
     INTO some_local_variable;
  <<do something with the local variable>>
END LOOP;

Dato che stai cercando di creare una vista, puoi prendere questa logica e inserirla in una funzione di tabella pipeline. Faresti un PIPE ROW per restituire i dati all'interno del ciclo. La tua vista potrebbe quindi essere creata sopra la funzione della tabella pipeline.