PL/SQL DEVELOPER中的专用复制(Special Copy)
--摘自PL/SQL DEVELOPER6.0的中文PDF帮助手册
如果你正在用 PL/SQL Developer 写 SQL 和 PL/SQL 代码,随后你又要在其它工具里使用代码,例如象 3GL 这样的程序设计语言,那么你可能需要把这些代码转换为稍微不同的格式。让我们假设你已经在 PL/SQL Developer 里写了并测试了这样一个SQL 语句:
select deptno, sum(sal) mgr_sal from emp
where job = 'MANAGER'
group by deptno
order by mgr_sal desc
例如,如果你要在Borland Delphi 里使用这个语句,你可能需要象这样的格式:
SQL := 'select deptno, sum(sal) mgr_sal from emp' + #13#10 +
'where job = ''MANAGER''' + #13#10 +
'group by deptno' + #13#10 +
'order by mgr_sal desc';
为了这个目的,在右击了编辑器里的一个选择后,你可以使用来自于编辑菜单或来自于弹出式菜单的专用复制功能。这个功能有一个子菜单,它显示了所有被定义的专用复制格式。在选择了格式之后,被转换的代码就被储存在剪贴板上了,这样你就可以粘贴它到相应工具的编辑器里了。专用复制格式被定义在 PL/SQL Developer 安装目录下的 SpecialCopy 子目录里。你可以改变预先确定的复制格式或者添加新的复制格式。仅仅简单地添加一个带有 .copy 扩展名的文本文件就可以了,它包含了一个针对 PL/SQL 代码第一行的变量(<line_1>)、一个针对 PL/SQL 代码最后一行的变量(<line_N>)和一个针对所有其它行的变量(<line_*>)。下面是一个针对 Borland Delphi 的例子:
;PL/SQL Developer SpecialCopy definition for Borland Delphi
;<line_1> for first line
;<line_*> for all other lines
;<line_N> for last line
;
SQL := '<line_1>' + #13#10 +
'<line_*>' + #13#10 +
'<line_n>';
第一行需要为指派到 SQL 的变量加上前言,接下来需要有一个 CR/LF 对。最后一行不需要有CR/LF 对,但需要用分号来终止。所有其它行仅仅需要 CR/LF 接在后面。如果 <line_1> 和 <line_n> 都与 <line_*> 一样,你可以忽略它们。在一些语言里,你需要对特定的字符使用换码序列。例如,在 C++ 里,你要对 tab字符(ASCII 码为 9)使用 \t 。要定义这些换码序列,请使用 #define 关键词:
#define char(9) = \t
#define \ = String("<line_1>\n") +
String("<line_*>\n") +
String("<line_n>");
你还可以使用 “#define compress” 来指出你要从结果里移除所有多余的空字符(空格、制表符和换行)。
注意,.copy 文件的名字将被包括在菜单里,所以你应该使用描述性的文件名。