如何将信息从ant传递给sql文件或过程

时间:2010-10-07 06:00:31

标签: java oracle ant

我正在使用ant target创建用户,如下所示

<target name="create_user">
     <exec executable="sqlplus" dir="${basedir}/dbsetup">
          <arg value="system/oracle@orcl"/>
          <arg value="@create_user.sql"/>
     </exec>    
</target>

和sql文件如下........

create user test identified by password;

grant resource, connect to test ;

grant create view to test ;

grant create materialized view to test ;

grant create sequence to test ;

grant create procedure to test ;

grant create any directory to test ;

grant create database link to test ;

alter user test  quota unlimited on users; 

quit;

目前,用户名是create_user.sql中的硬编码 现在我想从ant提示输入用户名和密码并传递给sql文件。

请告知我如何实现这一目标或其他方式来实现

2 个答案:

答案 0 :(得分:2)

我为此问题所做的是创建一个包含令牌的模板sql文件 我使用带有标记化的ant副本复制了模板,该标记创建了一个新文件,其中标记已被所提供的标记替换。
然后使用ant sql任务执行新副本 如果需要,可以使用各种不同的标记值重复此操作。

对于提示,我使用了蚂蚁输入任务,它将输入的值分配给变量,
然后在复制之前将变量设置为标记值。

答案 1 :(得分:0)

一种选择是在sql文件中使用&amp; 1位置参数,例如:

create user &1 identified by password;

使用ant输入任务提示用户名,然后将该值作为arg传递给目标中的sqlplus:

  <exec executable="sqlplus" failonerror="true">
        <arg value="${userid}/${password}@${tnsalias}"/>
        <arg value="yourFileNameGoesHere/>
        <arg value="theUserNameFromPromptGoesHere"/>
  </exec>

这样做的好处是可以将sql文件保存在可以从其他环境(如SQL * Plus和PL / SQL Developer)执行的形式中