我正在使用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文件。
请告知我如何实现这一目标或其他方式来实现
答案 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)执行的形式中