【发布时间】:2016-02-18 04:44:14
【问题描述】:
我必须使用 DBD::Oracle 连接到具有 LOGON 触发器的 Oracle 数据库,该触发器在登录时验证我的 v$session.program。
我试过了:
use strict;
use warnings;
use DBI;
DBI->connect ('dbi:Oracle:host=<ip>;sid=<sid>', 'test', 'TEST',
{ ora_module_name => 'My Program'}) || die DBI::errstr;
但这不起作用,因为 DBD::Oracle 直到连接之后才设置 v$session.program。
但是,JDBC 确实支持在连接前设置,通过:
Properties props = new Properties();
props.setProperty("user", username);
props.setProperty("password", password);
props.put("v$session.program", "My Program");
Class driver = Class.forName(driverClass);
但我没有使用 Java。我正在使用 Perl。有什么建议吗?!
[更新]
在进程上运行“strace”确定 DBD::Oracle 模块正在执行以下操作:
open("/proc/self/cmdline", O_RDONLY) = 4 读(4, "perl\0test.pl\0", 255) = 13
所以是的,理论上我可以创建一个名为“我的程序”的脚本(或软链接)并将其用作命令行来运行我的文件。但这在“非常悲伤而且一点也不好”的等级上相当高。 :(
【问题讨论】:
-
建议删除 Java 标记,因为这纯粹是 Perl 和 Oracle 连接/属性/触发器讨论。