在perl中执行sqlplus命令

时间:2014-02-19 05:02:08

标签: oracle perl sqlplus

我试图通过perl中的sqlplus命令检查sql连接。 我使用以下代码来执行此操作。

print "Befores\n";
$rc=system("sqlplus system/system @sqlfile.sql");
print "After $rc\n";
sleep(10);

这次rc中的返回值为0。但是,当我提供错误的凭据时。 sqlfile.sql文件包含唯一的sql命令'EXIT'。

$rc=system("sqlplus systemabc/system @sqlfile.sql");

这也以返回码0结束。但是,手动执行凭据是错误的。 帮助我解决这个问题......

提前致谢。 :)

4 个答案:

答案 0 :(得分:0)

是亲爱的朋友,,, 现在工作正常。

我刚刚在@ sqlfile.sql之前添加'\',即我转义了'@'符号,我在密码后面提到了数据库名称。现在我得到了完美的输出。 :)

改变如下:

$rc=system("sqlplus -L system/system@tstdb1 \@sqlfile.sql");

我使用的格式是: sqlplus -L Uname / Password @ DBName \ @SqlFileContainingMySQLQuries

和-L指定如果初始连接不成功,则不要重新提示用户名或密码。有关更多信息,请转到About SQLPLUS

我也尝试过没有在sqlfile.sql之前转义'@'符号,但是这个改变也应该适用于倒置昏迷,我使用单倒入昏迷而不是双倒入昏迷,如@R​​enéNyffenegger提到的那样:

$rc=system('sqlplus -L system/system@tstdb1 @sqlfile.sql');

我使用的格式是:   sqlplus Uname / Password @ DBName @SqlFileContainingMySQLQuries

这也可以。

答案 1 :(得分:-1)

是啊...... :)我也试过这个,谢谢你的答案@ user252025

我在做:

$rc=system("sqlplus -L user/user \@sql_file.sql");

Da rtrn代码对我来说是错误的 现在我改为

$rc=system("sqlplus -L user/user@Mydb \@sql_file.sql");

工作正常.. 再次感谢...

答案 2 :(得分:-2)

问题在于

$rc=system("sqlplus system/system @sqlfile.sql");

您的字符串引用了双引号("...")。这些字符串尝试epxand变量(从@$%开始。由于字符串中有@sqlfile,perl认为这是一个数组(当然不是)。

处理:

$rc=system('sqlplus system/system @sqlfile.sql');

答案 3 :(得分:-3)

你为什么要这样做? DBI的存在是为了提供一种合理且安全的方式来使用数据库并合理地从中获取输出/返回/错误。