-
geralmente as restrições DML dizem respeito apenas a instruções de modificação (UPDATE, DELETE ...), portanto, SELECT deve estar OK. Vou tentar encontrar uma declaração específica da Oracle.
-
As visualizações seriam sua primeira ferramenta para modularizar as consultas mais usadas.
-
As funções têm uma desvantagem em relação às visualizações:se forem chamadas de outro SELECT, elas não serão executadas no mesmo momento que o SELECT principal. Cada chamada para um SELECT é consistente, mas como o SELECT está no código da função e não no SQL principal, você pode retornar resultados inconsistentes. Isso não é possível com visualizações e sub-seleção:se uma instrução grande chamar uma visualização, a visualização será construída no mesmo momento que a consulta principal.
Atualizar :em relação ao seu comentário sobre consultas parametrizadas
Você pode construir visualizações parametrizadas, ou seja, visualizações que dependem de variáveis definidas antes da execução. Aqui está um exemplo no AskTom mostrando como você pode fazer isso com
userenv('client_info')
ou dbms_session.set_context
.