Generate DML/DDL/QUERY from SQL – the easy way
This is a comment on firstname.lastname@example.org’s article “Generate DML/DDL/QUERY from SQL” – comments are not enabled on their blog so here’s my addendum.
The following query is offered as a means of generating a script to ONLINE all datafiles in a database:
select 'ALTER DATABASE DATAFILE '''|| name || ''' online ;' from v$datafile;
I suggest an alternative method, which is both easier to write and easier to maintain:
select REPLACE(q'[ ALTER DATABASE DATAFILE '#NAME#' online ; ]','#NAME#',name) from v$datafile;
This way, the syntax within the DDL is unmuddied by the syntax required by the query to generate it. It’s immediately obvious that only single quotes will surround the name of the datafile in the generated DDL.
If you’re on a pre-10g database, you can still use this method, but you’ll need to revert to the old quote-escape:
select REPLACE(' ALTER DATABASE DATAFILE ''#NAME#'' online ; ','#NAME#',name) from v$datafile;