标签存档: Oracle

Win版本php5的安装

php oracle当前php5最新版本是5.4.6,但这版本只有zip压缩包,虽然使用并无问题,但win下还是喜欢msi安装文件。5.3版本有msi安装包,安装时,看了一下可选的安装项,有oracle驱动相关的,保留了该项。安装完后,路径变量也会自动修改。打开CMD窗口,敲php,结果报个错误:无法定位程序输入点OCI什么的。都知道oracle的底层库驱动叫OCI什么的,于是修改程序安装项目,将Oracle相关的取消,再启动,即正常。

Oracle中rownum的原理

oracle pl/sql rownumOracle中的rownum是一种伪列,它会根据返回记录生成一个序列化的数字。利用rownum,我们可以生产一些原先难以实现的结果输出,rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownum不同。因为它是个伪列的这个特殊性,我们在使用时也需要注意一些事项,不要掉入“陷阱”。在Oracle中,要按特定条件查询前N条记录,可以加上rownum条件来搞定它:

继续阅读 »

嵌入式Python中引用Pro *C主程序中建立的数据库链接

oracle python pro_cPython之所以被称为“胶水语言”,是因为它与其它语言之间良好的互操作性。可以在Python中方便的调用其它语言的模块,如C语言的Dll或SO等,而Python语言也可以以嵌入方式被其它语言调用并运行。相当于启动了一个内置的Python语言解释环境。那么问题来了,我们固然可以通过参数方式把宿主语言的变量传入Python,但是宿主语言如Pro *C如果创建了数据库连接的话,连接句柄如何传入嵌入式Python里呢?

继续阅读 »

cx_Oracle的简单连接测试例子

python oracle cx_oraclecx_Oracle是一个Python的扩展模块,用于连接Oracle数据库,并遵守Python数据库API规范2.0版本。其开发已历时十多年,最新更新日期是2014年5月25日,版本是5.1.3。通常使用cx_Oracle的步骤是:引用模块cx_Oracle,连接数据库,获取cursor,使用cursor进行各种操作,关闭cursor,关闭连接。引用模块很简单:import cx_Oracle。cx_Oracle建立连接有多种形式,以下一种最简单的例子:

继续阅读 »

Python访问Oracle数据库的方法

python cx_oracle oracle终于有时间来安装Python访问Oracle的模块。在网上搜索,使用最多的大约是cx_Oracle这个模块。 下载链接http://cx-oracle.sourceforge.net。其实Python中能操作Oracle的并非只有这个模块,比如以前操作Sybase所用的那个模块,其实可以支持多种数据库,并且也是满足Python的db api规范的,但目前显然还是cx_Oracle使用最广,网上Python访问Oracle用的大多是这个包。

继续阅读 »

Oracle的utl_file文件操作包和DBMS_METADATA.get_ddl方法。

oracle ddl utl_fileSybase数据库似乎没有什么办法直接访问操作系统文件,除了调用XP服务和Java函数。Oracle的功能则要丰富很多。utl_file包可以用于操作数据库服务器上的文件,能否用于操作客户端系统文件呢?听到过这种说法,然而自己还没有花时间去研究文档和验证。然而这仍然提供了一种非常有用的选择。而dbms_metadata.get_ddl则提供了一种方便的获取数据库中指定对象的ddl方法,两者配合能完成一些非常有用的工作。

继续阅读 »

Oracle 的各种join及where的执行次序

sql joinSql的join语句是根据字段间的关系,组合两个或以上表的语法。在ANSI标准中Join有四种,内联接,外联接,左联接与右联接。特殊的情况下,一个表甚至可以连接到自己。四种联接类型中的后三种其实都属于外联接。内联接是求两个表的交集,全外联接是两个表的并集,左外联接产生左表的完全集,而右表中匹配的则有值,没有匹配的则以null值取代。右外联接同样道理。十字联接则是笛卡尔积。

继续阅读 »

Oracle的sequence及left join等

oracle sequence joinOracle里有sequence对象,实际上是系统提供的一个自增值列。这个值增长到指定的大小后会重头开始。通常用在生成数据库数据记录的增长主键或序号的地方。Sequence是数据库系统的特性而非标准,有的数据库有Sequence,比如Oracle、DB2、PostgreSQL,有些则没有,比如MySQL、SQL Server、Sybase等数据库。Sybase中有一个identity列可以完成相似功能,但处理起来相对麻烦一些,因其并不是数据类型。

继续阅读 »

Oracle自定义函数中select语句令人费解的性能问题

oracle 索引索引既可以隐式调用,也可以显式调用。索引的优化对数据库的性能至关重要。在Oracle中开发一个对帐函数时,碰到了奇怪的现象,同样的语句放在函数中,与放在主程序中执行,性能差距数百倍,后来用性能工具分析才发现原来是某条select语句的索引引用不同,在函数中强制指定索引也无法生效。但同样的语句,区别只在于一个放在了函数中,Oracle在解释时为什么会厚此薄彼?似乎牵涉到一些深层的东西,暂时无法深究下去。

继续阅读 »

Oracle EXECUTE IMMEDIATE同时执行多条语句的问题

oracle EXECUTE IMMEDIATESybase中,将sql语句之间加上 go(原命令行方式语法),可用一条execute执行多条sql语句,这倒省事不少,在oracle中呢,用分号分隔行不?实验结果是不行。查了一下,说前后要用begin 和end,且每句后的分号及end后的分号不能省略,实验成功。想起以前看过的动态调用存储过程的例子前后的begin end了,总算知道了begin end 的用途。实测发现,即使只有单条语句,若未加begin end,也会报“无效字符”之类错误,即-911错误。所以还是要加上begin end。

第 1 页,共 3 页123