我查看了 Pro*C 生成的代码,经过一些实验后,我导出了使用的内部 Oracle 库函数的 API/ABI。
因此,我创建了跟踪库 libtraceproc,它在预加载时会拦截相关的 Oracle 库函数调用并漂亮地打印包括主机变量值的 SQL 语句。
该库有一些运行时选项,例如,用于记录到文件、输出统计信息以及在实际 Oracle 调用之前和/或之后启用跟踪。
它还支持 OCI API 的低级跟踪,即您也可以将它用于 OCI/OCCI/OTL 程序。
例子
$ LD_PRELOAD=./libtraceproc.so TRACEPROC_OPTIONS="-intercept -notime -sql" ./example/main
[..]
-- Before execution:
-- example/main.pc:274
insert into example_tbl (str,n) values ('a' ,0 ) returning n into :s5:s6 ;
insert into example_tbl (str,n) values ('b' ,1 ) returning n into :s5:s6 ;
[..]
-- After execution:
-- example/main.pc:274
insert into example_tbl (str,n) values ('a' ,0 ) returning n into 0 ;
insert into example_tbl (str,n) values ('b' ,1 ) returning n into 1 ;
[..]
libtraceproc.so
是跟踪库,main
是一个示例 Pro*C 应用程序。
请注意,无需重新编译或重新链接 Pro*C 代码。跟踪库由运行时链接器预加载。
一个
$ LD_PRELOAD=./libtraceproc.so TRACEPROC_OPTIONS="-help" ./example/main
显示库的帮助屏幕。