运行ant sql task后,我的sql过程从:
开始create or replace procedure test
is
begin
dbms_output.put_line($$plsql_line, 'demo');
end;
进入
create or replace procedure test
is
begin
dbms_output.put_line($plsql_line, 'demo');
end;
Ant任务是:
<target name="test">
<record name="test-log" />
<sql userid="dev"
password="dev"
url="jdbc:oracle:thin:@192.168.1.1:1521:DEMODB"
keepformat="yes"
driver="oracle.jdbc.OracleDriver"
delimiter="/"
encoding="utf8"
escapeprocessing="false"
delimitertype="normal">
<fileset dir=".">
<include name="test.sql"/>
</fileset>
</sql>
</target>
如何强制Ant不要用'$'替换'$$'?
答案 0 :(得分:0)
请参阅ant manual properties / property expansion:
为了保持与旧版Ant的向后兼容性,a 单身&#39; $&#39;除了类似属性的构造之外遇到的字符 (包括一对匹配的法国大括号)将被解释 从字面上;也就是说,&#39; $&#39;。 &#34;正确&#34;方式来指定这个文字 但是,字符是通过使用转义机制 无条件地,以便&#34; $$&#34;通过指定&#34; $$$$&#34;获得。混合 这两种方法产生了不可预测的结果,因为&#34; $$$&#34;结果是 &#34; $$&#34;
表示您需要使用$$$$...
,请参阅:
<project>
<echo>
1.
create or replace procedure test
is
begin
dbms_output.put_line($$plsql_line, 'demo');
end;
</echo>
<echo>
2.
create or replace procedure test
is
begin
dbms_output.put_line($$$$plsql_line, 'demo');
end;
</echo>
</project>
输出:
[echo] 1.
[echo] create or replace procedure test
[echo] is
[echo] begin
[echo] dbms_output.put_line($plsql_line, 'demo');
[echo] end;
[echo] 2.
[echo] create or replace procedure test
[echo] is
[echo] begin
[echo] dbms_output.put_line($$plsql_line, 'demo');
[echo] end;
- 评论后编辑 -
复制原始sql文件,然后使用replace task编辑复制的文件,并使用已编辑的文件运行sqltask:
<!-- copy ... -->
<replace dir="..." value="$$$$$$$$" token="$$$$">
<include name="**/*.sql"/>
</replace>
<!-- sql ... -->