我正在使用 open/print 使用 sqlplus 执行 SQL 语句,如下所示:
open (PLSQL, "|sqlplus -s $db_url");
print PLSQL <<ENDSQL;
... some SQL statements ...
exit;
ENDSQL
close(PLSQL);
我的问题是如果遇到一些错误,如何捕获执行 sql 语句的退出代码。我认为使用 DBI 应该会好得多,但我更喜欢对上述问题有一个解决方案。非常感谢!
我正在使用 open/print 使用 sqlplus 执行 SQL 语句,如下所示:
open (PLSQL, "|sqlplus -s $db_url");
print PLSQL <<ENDSQL;
... some SQL statements ...
exit;
ENDSQL
close(PLSQL);
我的问题是如果遇到一些错误,如何捕获执行 sql 语句的退出代码。我认为使用 DBI 应该会好得多,但我更喜欢对上述问题有一个解决方案。非常感谢!
sqlplus
正如您所说,使用 DBI 模块比进行数据库操作要好得多。该实用程序仅用作命令行便利,不适用于任何主要的数据库操作,并且使用该模块您可以更好地控制处理可能遇到的任何错误,这似乎是您问题的重点
Perl 本身不允许连接到进程的 STDIN 和 STDOUT。为此,您需要使用IPC::Open2
CPAN 中的模块。阅读与另一个进程的双向通信中的问题
我没有看到 SQLPlus 为 SQL 语句返回正确的退出代码,只有连接失败或身份验证失败。
echo "SELECT * FROM NO_EXIST;" | sqlplus64 -S USER/PASS@my.db/MYAPP ; echo $?
SELECT * FROM NO_EXIST
*
ERROR at line 1:
ORA-00942: table or view does not exist
0
如果您可以管理它,我强烈推荐一个语言库。我不能,所以将 grep 输出ORA-\d\d\d\d\d\d
作为失败的指示。
希望有帮助。