我必须使用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;
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为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);
Run Code Online (Sandbox Code Playgroud)
但我不是在使用Java.我正在使用Perl.有什么建议?!
[UPDATE]
在进程上运行"strace"确定DBD :: Oracle模块正在执行以下操作:
open("/ proc/self/cmdline",O_RDONLY)= 4 read(4,"perl\0test.pl\0",255)= 13
所以,是的,我理论上可以创建一个名为"我的程序"的脚本(或软链接),并将其用作命令行来运行我的文件.但是在"非常伤心且根本不好"的规模上,这个比率相当高.:(
我在Pure Perl中有一个复杂的编码功能,我正在转换为XS,希望获得性能提升.
我转换为XS的函数需要以递归方式调用自身.我可以看到如何使用call_sv [感谢"man perlcall"]来调用Pure Perl函数.
但是我如何在XS中称自己(或任何其他XS功能)呢?
(PS效率非常理想...)
有人可以给我一个提示吗?还是一个例子?PPP-请!
更新:第一个答案是绝对正确的.调用递归纯C函数可以正常工作.