“使用SQL语句生成SQL语句”是一个非常实用的技巧。在感受这个技巧带给我们便利的同时,也要注意使用过程中的一个小拦路虎——对“单引号”的特殊处理。
我们需要对单引号给予特殊的关照,Oracle在单引号中转义单引号的方法:两个单引号表示一个单引号。
1.用实际的例子来演示一下
sec@ora10g> col "What's your name?" for a30
sec@ora10g> select 'I''m SECOOLER.' "What's your name?" from dual;
What's your name?
------------------------------
I'm SECOOLER.
2.我们使用这个小技巧生成一份分析SEC用户下所有表的SQL语句(可以按需定制)
sec@ora10g> SET LIN 300
sec@ora10g> SET HEAD OFF
sec@ora10g> select 'EXECUTE DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'
2 || ''''
3 || OWNER
4 || ''''
5 || ',TABNAME=>'
6 || ''''
7 || TABLE_NAME
8 || ''''
9 || ',METHOD_OPT=>'
10 || ''''
11 || 'FOR ALL COLUMNS SIZE 254'
12 || ''''
13 || ',DEGREE=>4,CASCADE=>TRUE);'
14 from DBA_TABLES
15 where WNER = 'SEC';
EXECUTE DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'SEC',TABNAME=>'T',METHOD_OPT=>'FOR ALL COLUMNS SIZE 254',DEGREE=>4,CASCADE=>TRUE);
……
3.小结
只要掌握了单引号的转义规则,加上一点点的细心,这个著名的SQL生成SQL的小技巧就尽收囊中了。
Good luck.
secooler
10.02.28
-- The End --
我们需要对单引号给予特殊的关照,Oracle在单引号中转义单引号的方法:两个单引号表示一个单引号。
1.用实际的例子来演示一下
sec@ora10g> col "What's your name?" for a30
sec@ora10g> select 'I''m SECOOLER.' "What's your name?" from dual;
What's your name?
------------------------------
I'm SECOOLER.
2.我们使用这个小技巧生成一份分析SEC用户下所有表的SQL语句(可以按需定制)
sec@ora10g> SET LIN 300
sec@ora10g> SET HEAD OFF
sec@ora10g> select 'EXECUTE DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'
2 || ''''
3 || OWNER
4 || ''''
5 || ',TABNAME=>'
6 || ''''
7 || TABLE_NAME
8 || ''''
9 || ',METHOD_OPT=>'
10 || ''''
11 || 'FOR ALL COLUMNS SIZE 254'
12 || ''''
13 || ',DEGREE=>4,CASCADE=>TRUE);'
14 from DBA_TABLES
15 where WNER = 'SEC';
EXECUTE DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'SEC',TABNAME=>'T',METHOD_OPT=>'FOR ALL COLUMNS SIZE 254',DEGREE=>4,CASCADE=>TRUE);
……
3.小结
只要掌握了单引号的转义规则,加上一点点的细心,这个著名的SQL生成SQL的小技巧就尽收囊中了。
Good luck.
secooler
10.02.28
-- The End --
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-628186/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/519536/viewspace-628186/