It is best practice to have PL/SQL code in my application that queries Oracle Data Dictionary views (all_tab_columns, etc...)? Should this views be only used for DBA's and developers as they daily basis work?
Example: I need to verify if a variable can fit in a table column size. This will be asked inside a process called by any application users.
Your example may not be the best one, since there are other ways to do that. For example, define the PL/SQL variable as table.column%type
and then catch any exceptions that arise (due to length issues, e.g.,) when trying to put user data into it.
In general, I find it very unusual for production code to have to query from the data dictionary. But, I have done it on occasion and do not remember having any special problems arising from it, except to remember that the PL/SQL object owner must have direct privileges on the dictionary and cannot be getting access to them via a role, since roles are disabled in named PL/SQL blocks having definer's rights.