标签: oci8

我如何要求特定版本的红宝石宝石?

具体来说,红宝石oci8宝石.我安装了1.0.7和2.0.4.我想要1.0.7.

我可以只需要oci8,但我没有得到我想要的版本.

irb(main):001:0> require 'oci8'
=> true
irb(main):002:0> OCI8::VERSION
=> "2.0.4"
Run Code Online (Sandbox Code Playgroud)

我可以要求使用文件的完整路径,它可以工作,但不会是可移植的:

irb(main):001:0> require 'C:\Ruby\lib\ruby\gems\1.8\gems\ruby-oci8-1.0.7-x86-mswin32-60\lib\oci8'
=> true
irb(main):002:0> OCI8::VERSION
=> "1.0.7"
Run Code Online (Sandbox Code Playgroud)

我可以使用gem命令来询问我想要的版本,但它似乎没有实际加载库:

irb(main):001:0> gem 'ruby-oci8', :lib=>'oci8', :version=>'=1.0.7'
=> true
irb(main):002:0> OCI8::VERSION
NameError: uninitialized constant OCI8
    from (irb):2
Run Code Online (Sandbox Code Playgroud)

如果加载库,我肯定会支持这种最后的方法,而不仅仅是确认它存在于我的系统中.我错过了什么?

ruby gem version oci8

43
推荐指数
1
解决办法
3万
查看次数

如何在go中连接到Oracle

我认为有两种方法可以在Go(Windows)上连接到Oracle DB:

  1. github.com/tgulacsi/goracle
  2. github.com/mattn/go-oci8

但是对于我这个级别的人(初学者在开源+ golang),这两个方法/驱动程序非常棘手.

这也是一个负担,必须经历所有这些,以便在不同的机器上进行部署,开发等.(也假设它可以工作).

有没有更好的方法在golang中连接到Oracle数据库,或者如果没有,那么有人可以在高级视图或任何视图中向我解释这会使这更容易吗?

指针将非常感激.

TQ.

windows oracle cx-oracle oci8 go

11
推荐指数
1
解决办法
1万
查看次数

如何使用Oracle SQL查询首先按数字排序?

我有一个带有'title'字段的表,它是varchar2,我想选择所有行,然后按编号排序,然后按字母顺序对它们进行排序.

例如,我目前ORDER BY title最终使用一个简单的方法:

  • ABC
  • 高清
  • 321

但我想要这个:

  • 321
  • ABC
  • 高清

奇怪的是,SQL Developer显示"正确"的顺序,首先是数字.但是在我的应用程序(使用OCI8的PHP)上,它显示了最后的数字.

php sql oracle oci8 sql-order-by

7
推荐指数
2
解决办法
1万
查看次数

CHAR语义和ORA-01461

我使用Oracle后端(OCI8函数)维护一个PHP驱动的应用程序.该应用程序是使用Oracle 10g XE开发的,并部署在客户拥有的任何版本上.

该应用程序处理单字节文本(ISO-8859-15),我在开发针对西欧版Oracle XE 时从未遇到任何问题.但是,我最近安装了通用版,我在插入带有非ASCII字符的大字符串时遇到了问题.这个版本设置NLS_CHARACTERSET = AL32UTF8; 因为我的应用程序使用WE8ISO8859P15Oracle静默地将我的输入数据从ISO-8859-15转换为UTF-8(这很好).但似乎某些大小检查出错了:一个包含1500个字符的字符串(ISO-8889-15为1500字节,UTF-8为4500字节)似乎溢出一VARCHAR2(4000 CHAR)列.

我已经创建了这个测试表:

CREATE TABLE FOO (
    FOO_ID NUMBER NOT NULL ENABLE,
    DATA_BYTE VARCHAR2(4000 BYTE),
    DATA_CHAR VARCHAR2(4000 CHAR),

    CONSTRAINT FOO_PK PRIMARY KEY (FOO_ID)
);
Run Code Online (Sandbox Code Playgroud)

使用此代码可以重现此问题:

<?php
$connection = oci_connect(DB_USER, DB_PASS, DB_CONN_STRING, 'WE8ISO8859P15');
if( !$connection ){
    $e = oci_error();
    die(htmlspecialchars($e['message']));
}

$id = 1;
$data = str_repeat('€', 1500);

$sql = 'INSERT INTO FOO (FOO_ID, DATA_CHAR) ' .
    'VALUES (:id, :data)';
$res …
Run Code Online (Sandbox Code Playgroud)

php oracle oci8

7
推荐指数
1
解决办法
7391
查看次数

PDO_OCI与OCI8

我正在开发一个新项目并尝试确定是否应该使用PDO_OCI或oci8进行数据库连接.不幸的是,我认为没有人真正比较过这两者.

我的信息如下,以便您知道为什么我关心这个选择.OCI8由Oracle(AFAIK)开发,因此这似乎是一个不错的选择.我更喜欢PDO,但它看起来不像PDO_OCI扩展已经在一段时间内更新,它仍然在PHP文档页面上标记为实验性的.

如果有人能给我任何关于为什么你会/不会使用其中一个的想法,那么我可以进一步了解哪个更好,哪个更好.

php pdo oci8

7
推荐指数
1
解决办法
6328
查看次数

Ruby无法看到NLS_LANG环境变量

我在CentOS上运行ruby脚本,并通过rvm(1.9.3)安装ruby.

我在.bash_profile中设置了NLS_LANG变量.

[app@box stasis]$ echo $NLS_LANG
en_US.UTF-8
[app@box stasis]$ which ruby
~/.rvm/rubies/ruby-1.9.3-p194/bin/ruby
Run Code Online (Sandbox Code Playgroud)

但是当试图通过ruby(oci8驱动程序)访问它时,它无法找到它:

 1.9.3-p194 :001 > ENV['NLS_LANG']
 => nil 
Run Code Online (Sandbox Code Playgroud)

访问其他变量似乎工作:

 1.9.3-p194 :004 > ENV['USER']
 => "app"
Run Code Online (Sandbox Code Playgroud)

我的脚本显示以下内容: Warning: NLS_LANG is not set. fallback to US7ASCII.

我正在从ruby脚本运行sqlplus(执行一些.sql文件),并且特殊字符都搞砸了.

我怎样才能看到价值?

ruby bash oci8

6
推荐指数
1
解决办法
9200
查看次数

oci_connect()仅适用于命令行

好的,所以我对oci,apache,php和suse有这个可怕的问题.首先,版本:

PHP 5.3.15 (cli)
Apache/2.2.22 (Linux/SUSE)
OCI8 1.4.9
SUSE 12.2 32 bit
Oracle client 10.2.0.4
Run Code Online (Sandbox Code Playgroud)

问题

我有非常简单的php文件:

<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');
    oci_connect('user', 'passwd', 'host/sid');
?>
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行它时执行正常:

machine:~ # php oci.php
machine:~ #
Run Code Online (Sandbox Code Playgroud)

但是当我在浏览器中运行它时,它给了我:

Warning: oci_connect() [function.oci-connect]: OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories
Run Code Online (Sandbox Code Playgroud)

Apache配置

我一直在努力解决这个问题,我很确定我的apache配置是正确的.

任何apache进程启动之前导出所有必需的变量- 我添加了

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/oracle/home/lib; export LD_LIBRARY_PATH
ORACLE_HOME=/path/to/oracle/home; export ORACLE_HOME
TNS_ADMIN=/path/to/oracle/home/network/admin; export TNS_ADMIN
NLS_LANG=POLISH_POLAND.EE8MSWIN1250; export NLS_LANG …
Run Code Online (Sandbox Code Playgroud)

php suse oci8 oracle10g apache2.2

6
推荐指数
1
解决办法
1万
查看次数

Windows 服务器上的 OCI8 php 扩展安装

我在使 OCI8 在我的服务器安装上工作时遇到特定问题。

第一次设置:

  • 赢 2008 服务器 32 位
  • ZendServer for PHP with Apache2.2
  • PHP 5.3.14 版本,没有 php_oci8 文件
  • 没有安装oracle的东西

我需要能够连接到远程 oracle 数据库,所以我发现应该使用 OCI8 扩展。为了使 OCI8 工作,我还应该至少需要服务器上的 Oracle Instant Client,因为某些 DLL OCI8 需要。

我做了什么?

  • 从他们的站点(oracle 下载站点)下载了 Oracle Instant Client ,版本 11.2.0.4.0
  • 解压到文件夹中,我选择了 Program Files/oci_11_2
  • 添加到windows变量路径地址
  • 重新启动赢
  • 从 PECL 下载 php_oci8 库(PECL oci8 dl 站点
  • 将它们放入 php.ini 中设置的 ext 目录中
  • 添加 extension=php_oci8.dll 到 php.ini
  • 重新启动阿帕奇

毕竟,我检查了 php_info 以查看是否一切正常,但是没有 oci8 的迹象。

我尝试过旧的 Oracle 即时客户端,在 php_oci8.dll、php_oci8_11g.dll 或 php_oci8_12c.dll 之间切换,但没有任何帮助。 …

php oci8 windows-server-2008-r2 php-5.3

5
推荐指数
1
解决办法
1万
查看次数

如何使用Oracle Instant Client在Ubuntu 18.04 LTS中使用PHP-FPM和NGINX启用OCI8 PHP扩展?

我正在使用https://launchpad.net/~ondrej/+archive/ubuntu/php提供的最新PHP软件包.

当我构建并安装OCI8扩展时,一切看起来都是有序的,但是尽管在PHP-FPM配置中启用了扩展,但它的存在并没有反映在输出中phpinfo().

以下Gist详细介绍了我用于配置,构建和安装OCI8 PHP扩展的确切过程:

https://gist.github.com/cbj4074/fa761f60b6f8db431539d76ebfba828e

完全相同的流程和配置在Ubuntu 16.04 LTS上工作得非常好,所以看起来在Ubuntu 18.04 LTS上有一些根本的区别,无论是操作系统还是有问题的PHP包.

作为一个重要的(我怀疑与此问题相关)背景信息,在Ubuntu 18.04 LTS上,扩展无法在开箱即用的CLI环境中加载,错误如下:

PHP警告:PHP启动:无法加载动态库'/usr/lib/php/20160303/oci8.so' - libmql1.so:无法打开共享对象文件:第0行的未知中没有此类文件或目录

我这样解决了这个问题:

# echo 'LD_LIBRARY_PATH="/opt/oracle/instantclient_12_2"' >> /etc/environment
Run Code Online (Sandbox Code Playgroud)

我认为也许添加LD_LIBRARY_PATH到PHP-FPM环境配置可能会解决那里的等效问题:

# echo "env['LD_LIBRARY_PATH'] = /opt/oracle/instantclient_12_2" >> /etc/php/7.2/fpm/pool.d/www.conf
# systemctl restart php7.2-fpm
Run Code Online (Sandbox Code Playgroud)

这确实导致LD_LIBRARY_PATH值,符合规定,要体现在两者Environment的部分phpinfo()(当通过PHP-FPM + NGINX呈现并从一个浏览器请求),并且PHP Variables部分,如$_SERVER['LD_LIBRARY_PATH'].

奇怪的是,即使设置了PHP-FPM的日志记录debug,我也没有看到libmql1.so我使用CLI遇到的任何错误跟踪.OCI8扩展无法以静默方式加载.display_startup_errors = On在PHP-FPM中也是有效的php.ini.

我当选,看看是否OCI8扩展在Apache的工作,在同一台服务器上,它本身,提供我补充export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2/etc/apache2/envvars; 在absense中,Apache在创业时抱怨:

PHP警告:PHP启动:无法加载动态库'oci8.so'(试过:/usr/lib/php/20170718/oci8.so(libmql1.so:无法打开共享对象文件:没有这样的文件或目录),/ usr/lib/php/20170718/oci8.so.so(/usr/lib/php/20170718/oci8.so.so:无法打开共享对象文件:没有这样的文件或目录))在第0行的Unknown中

LD_LIBRARY_PATH在Ubuntu 16.04 LTS上,根据我的观察以及有关/sf/answers/3166972791/的评论,在Ubuntu …

php ubuntu oci8 instantclient fpm

5
推荐指数
1
解决办法
3138
查看次数

dyld:Apple M1 上的 php oic8 的惰性符号绑定失败

在基于 Intel 的 MacOS 上,我的 php-oci8 安装过程很好。在我迁移到新架构 Apple M1 后,我遇到了奇怪的异常。并且无法理解如何解决它。

安装过程:

brew install php

cd ~/Downloads

curl -O https://download.oracle.com/otn_software/mac/instantclient/198000/instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg
curl -O https://download.oracle.com/otn_software/mac/instantclient/198000/instantclient-sdk-macos.x64-19.8.0.0.0dbru.dmg
curl -O https://download.oracle.com/otn_software/mac/instantclient/198000/instantclient-sqlplus-macos.x64-19.8.0.0.0dbru.dmg

hdiutil mount instantclient-basic-macos.x64-19.8.0.0.0dbru.dmg 
hdiutil mount instantclient-sdk-macos.x64-19.8.0.0.0dbru.dmg
hdiutil mount instantclient-sqlplus-macos.x64-19.8.0.0.0dbru.dmg

/Volumes/instantclient-basic-macos.x64-19.8.0.0.0dbru/install_ic.sh

hdiutil unmount /Volumes/instantclient-basic-macos.x64-19.8.0.0.0dbru
hdiutil unmount /Volumes/instantclient-sdk-macos.x64-19.8.0.0.0dbru
hdiutil unmount /Volumes/instantclient-sqlplus-macos.x64-19.8.0.0.0dbru

sudo mkdir -p /opt/oracle
sudo mv instantclient_19_8/ /opt/oracle

pecl install oci8

# Oracle Instant Client [autodetect] : instantclient,/opt/oracle/instantclient_19_8

Build process completed successfully
Installing '/opt/homebrew/Cellar/php/8.0.1_1/pecl/20200930/oci8.so'
install ok: channel://pecl.php.net/oci8-3.0.1
Extension oci8 enabled in php.ini
Run Code Online (Sandbox Code Playgroud)

当我尝试检查 oci8 是否正确加载时,我收到下一个问题:

php …
Run Code Online (Sandbox Code Playgroud)

php oracle oci8

5
推荐指数
1
解决办法
510
查看次数