我有一个简单的测试程序,当我运行时,我得到:
./hello: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
我这样链接:
$(CC) $(CCFLAGS) -o hello hello.o -L../ocilib-3.9.3/src/.libs -L../instantclient_11_2 -locilib
Run Code Online (Sandbox Code Playgroud)
我的LD_LIBRARY_PATH包含:
LD_LIBRARY_PATH=../ocilib-3.9.3/src/.libs:../instantclient_11_2:/usr/lib
Run Code Online (Sandbox Code Playgroud)
/ usr/lib看起来像这样:
Linux$ ls -l /usr/lib/libaio*
lrwxrwxrwx 1 root root 15 Nov 5 2008 /usr/lib/libaio.so.1 -> libaio.so.1.0.1
-rwxr-xr-x 1 root root 2632 Sep 16 2005 /usr/lib/libaio.so.1.0.0
-rwxr-xr-x 1 root root 2628 Sep 16 2005 /usr/lib/libaio.so.1.0.1
Run Code Online (Sandbox Code Playgroud)
输出ldd你好:
libocilib.so.3 => ../ocilib-3.9.3/src/.libs/libocilib.so.3 (0x0000002a95558000)
libc.so.6 => /lib64/tls/libc.so.6 (0x0000003811200000)
libclntsh.so.11.1 => ../instantclient_11_2/libclntsh.so.11.1 (0x0000002a956c4000)
/lib64/ld-linux-x86-64.so.2 (0x000000552aaaa000)
libnnz11.so …Run Code Online (Sandbox Code Playgroud) 我可以找出在Oracle数据库中的表上执行最后一次INSERT,UPDATE或DELETE语句的时间,如果是,如何执行?
一点背景:Oracle版本为10g.我有一个定期运行的批处理应用程序,从单个Oracle表中读取数据并将其写入文件.如果自上次作业运行以来数据没有发生变化,我想跳过此步骤.
该应用程序是用C++编写的,并通过OCI与Oracle通信.它使用"普通"用户登录Oracle,因此我无法使用任何特殊的管理员资源.
编辑:好的,"Special Admin Stuff"并不是一个很好的描述.我的意思是:除了从表中选择和调用存储过程之外,我什么也做不了.如果想在2010年之前完成任务,那么改变数据库本身的任何内容(比如添加触发器)都是不可思议的选择.
我的应用程序在:
ruby-2.6.4
Rails 4.2.8
activerecord-4.2.8
我升级Rails应用程序,以ruby-2.6.4 当运行在开发rake任务,进行测试,我对收到错误BigDecimal()和.../vendor/bundle/ruby/2.6.0/gems/ruby-oci8/...
ArgumentError: invalid value for BigDecimal(): "0.E+00"
/sha/git/sha_human_resources/shared/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/bindtype.rb:35:in `BigDecimal'
...
.../vendor/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/bindtype.rb:216: warning: constant ::Fixnum is deprecated
.../vendor/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/bindtype.rb:219: warning: constant ::Bignum is deprecated
.../vendor/bundle/ruby/2.6.0/gems/ruby-oci8-2.1.8/lib/oci8/compat.rb:73: warning: constant ::Fixnum is deprecated
Run Code Online (Sandbox Code Playgroud)
我找到了几个关于更新bigdecimal和oci8gems 的线程,所以尝试了几个版本,发现这些有帮助git diff Gemfile::
-gem 'ruby-oci8', '~> 2.1.5'
+gem 'ruby-oci8', '~> 2.2.8'
Run Code Online (Sandbox Code Playgroud)
并添加了一个 bigdecimal gem:
+gem "bigdecimal", ">= 2.0.0"
Run Code Online (Sandbox Code Playgroud)
现在,当我运行 rake 任务时,出现此错误:
rake aborted!
NoMethodError: undefined method `new' for BigDecimal:Class
.../vendor/bundle/ruby/2.6.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/duplicable.rb:111:in `<class:BigDecimal>'
.../vendor/bundle/ruby/2.6.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object/duplicable.rb:106:in `<top (required)>'
.../vendor/bundle/ruby/2.6.0/gems/activesupport-4.2.8/lib/active_support/core_ext/object.rb:3:in …Run Code Online (Sandbox Code Playgroud) 当您开发一个与oracle DB对话的Java应用程序时,有两个选项吗?一个是oracle瘦驱动程序,另一个是需要自己安装的OCI驱动程序(如果我误解,请更正).
现在,有什么利弊?很明显,薄型驱动器在安装方面听起来要好得多,但是OCI可以做什么,薄的却不行?
开发环境是Tomcat6 + Spring 3.0 + JPA(Hibernate)+ apache-DBCP
我正在处理文件加载程序.
此程序的目的是获取输入文件,对其数据进行一些转换,然后将数据上载到Oracle数据库中.
我面临的问题是我需要优化在Oracle上插入非常大的输入数据.
我正在将数据上传到表中,比方说ABC.
我在我的C++程序中使用Oracle提供的OCI库.具体来说,我使用OCI连接池进行多线程并加载到ORACLE.(http://docs.oracle.com/cd/B28359_01/appdev.111/b28395/oci09adv.htm)
以下是用于创建表ABC的DDL语句 -
CREATE TABLE ABC(
seq_no NUMBER NOT NULL,
ssm_id VARCHAR2(9) NOT NULL,
invocation_id VARCHAR2(100) NOT NULL,
analytic_id VARCHAR2(100) NOT NULL,
analytic_value NUMBER NOT NULL,
override VARCHAR2(1) DEFAULT 'N' NOT NULL,
update_source VARCHAR2(255) NOT NULL,
last_chg_user CHAR(10) DEFAULT USER NOT NULL,
last_chg_date TIMESTAMP(3) DEFAULT SYSTIMESTAMP NOT NULL
);
CREATE UNIQUE INDEX ABC_indx ON ABC(seq_no, ssm_id, invocation_id, analytic_id);
/
CREATE SEQUENCE ABC_seq;
/
CREATE OR REPLACE TRIGGER ABC_insert
BEFORE INSERT ON ABC
FOR EACH …Run Code Online (Sandbox Code Playgroud) 简洁版:
我正在寻找以下Java技术的C++ OCI改编,其中代码能够将数组数组(数组大小可以变化)绑定到非PL/SQL SELECT语句中,然后在WHERE ID IN (...)样式检查中使用结果数组.
http://rafudb.blogspot.com/2011/10/variable-inlist.html
原始问题:
我们有一个C++应用程序通过OCI与Oracle通信.我们正在尝试修复通过连接文本生成SQL查询的旧代码; 相反,我们希望尽可能多地使用绑定变量.我们提出了一个特殊的案例,即我们没有一个好的解决方案.
SELECT * FROM MyTable WHERE ID IN (1, 4, 10, 30, 93)
Run Code Online (Sandbox Code Playgroud)
其中(1, 4, 10, 30, 93)一部分来自一个vector<int>或数据的其他一些灵活大小容器.如果我们知道它总是五个值,我们可以这样做:
SELECT * FROM MyTable WHERE ID IN (:1, :2, :3, :4, :5)
Run Code Online (Sandbox Code Playgroud)
但它可能是一个条目,或十个,甚至可能是零.显然,如果我们将查询构建为字符串,我们可以根据需要添加尽可能多的数字,但目标是尽可能避免这种情况并坚持只绑定变量.
有没有一个很好的方法来实现这一目标?例如,在OCI中,我可以绑定一个数组然后从中进行子选择吗?
SELECT * FROM MyTable WHERE ID IN (SELECT * FROM :1)
Run Code Online (Sandbox Code Playgroud)
:1OCI阵列在哪里?(可能语法不同.)有没有人有这方面的经验?示例代码将是天赐之物,因为我倾向于编写原始OCI.谢谢 :)
编辑:我想比在PL/SQL过程解析的字符串中绑定更好,如果可能的话.我相信在很多情况下我们会吹掉4000个字符的限制,而且我觉得这只是交易一种我很舒服的字符串操作,另一种我不是(我不能)调试很容易).如果可能的话,我想将一个值数组(或某种形式的数据集)绑定到一个标准SQL语句中.
编辑2:一些调查发现以下链接似乎正在做我想要的,但在Java:http: //rafudb.blogspot.com/2011/10/variable-inlist.html有谁知道如何适应这个处理C++ OCI?
我工作的公司目前使用一些基本功能来抽象OCI库作为数据库连接的手段.我们正在考虑切换到PHP的PDO对象,但从一些快速搜索来看,看起来Oracle驱动程序比其他PDO驱动程序稍微不成熟.对于在生产环境中使用PDO/oci8的人,我将不胜感激.
谢谢!
我有一个PHP函数调用PL/SQL包,它可以抛出许多已知的异常(即用户异常),我可以在PHP中捕获并执行操作.问题是,尽管在PHP中捕获异常,但我在PHP日志文件中收到一条警告,其中包含来自PL/SQL异常的堆栈跟踪:
PHP Warning: oci_execute(): ORA-20001: Something isn't valid
ORA-234565: at "MY.PACKAGE", line 234
ORA-923485: at "MY.PACKAGE", line 123
Run Code Online (Sandbox Code Playgroud)
我怎样才能抑制这些OCI警告?我不想压制所有警告,因为它们对其他问题有帮助,但是当我的PL/SQL出现预期错误时,我不希望它填满我的日志文件.
当使用Pro*C(Oracle for C-Code的嵌入式SQL预处理器)或OCI时,我注意到connect/init例程安装了一些信号处理程序.
这意味着在之前
EXEC SQL CONNECT :username IDENTIFIED BY :password USING :dbspec ;
Run Code Online (Sandbox Code Playgroud)
或者a
OCIEnvNlsCreate()
Run Code Online (Sandbox Code Playgroud)
我可以验证,例如这些信号有以下处理程序:
No NAME Pointer SA_SIGINFO SIG_DFL SIG_IGN
?????????????????????????????????????????????????????????????????????????????
1 SIGHUP (nil) false true false
2 SIGINT (nil) false true false
3 SIGQUIT (nil) false true false
4 SIGILL (nil) false true false
5 SIGTRAP (nil) false true false
6 SIGABRT (nil) false true false
7 SIGBUS (nil) false true false
8 SIGFPE (nil) false true false
9 SIGKILL (nil) false true false
10 SIGUSR1 …Run Code Online (Sandbox Code Playgroud) 当我尝试连接到我的数据库时,一切正常,但是当我尝试使用query()命令执行SQL语句时,我收到此错误:
连接被重置
页面时重置了与服务器的连接
页面无法加载.
$sql = <<<SQL
SELECT
1
FROM
dual
SQL;
$oci=Yii::app()->db;
$command = $oci->createCommand($sql);
$dataReader = $command->query();
Run Code Online (Sandbox Code Playgroud)
我正在尝试在index.php页面中执行此操作,如果我对最后一行进行注释,则页面加载成功.
我测试了连接,echo isset(Yii::app()->db);我得到了1.
我正在oci8Pdo.OciDbConnection上课.
编辑:
print_r($ command)结果:
CDbCommand Object ( [params] => Array ( ) [_connection:private] => OciDbConnection Object
( [pdoClass] => Oci8PDO [connectionString] => oci:dbname=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=********)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=********)));
[username] => ***** [password] => ******* [schemaCachingDuration] => 0
[schemaCachingExclude] => Array ( ) [schemaCacheID] => cache
[queryCachingDuration] => 0 [queryCachingDependency] => [queryCachingCount] => 0
[queryCacheID] => cache …Run Code Online (Sandbox Code Playgroud)