PHP连接Oracle并分页访问(OCI版)
虽然本人没有验证过,不过据说通过ADODB访问Oracle对性能影响很小.而且ADODB比OCI8也要方便很多,毕竟许多东西都再次封装过.不过不管怎么说这都在中间又加上了一层,理论上来说出现问题的几率和解决问题的难度都变大了.而Oracle又经常用在不能随便出问题的环境,所以想必想要直接使用OCI的情况也不少.以下就是我的例子:
<?php
$conn = oci_connect("username", "password", "url/service_name"); //第三项使用的是Oracle Easy Connect string.详见 http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm#NETAG255
$stmt = oci_parse($conn,
"SELECT * from (SELECT rownum r,ima_file.* from ima_file) s WHERE s.r >= 9000 AND s.r <= 9020");
oci_execute($stmt, OCI_DEFAULT); //OCI_DEFAULT意味着任何变更都需要Commit或Rollback
$i = 0;
echo "<table border=1><caption>IMA_FILE</caption><thead><td>计数</td><td>行数</td><td>料件号</td><td>品名</td><td>规格</td></thead>";
while ($row = oci_fetch_array($stmt, OCI_BOTH)) {
//OCI_BOTH将创建既可以使用数字索引,又可以使用字段名指向相同项的数组.
echo "<tr><td>" . ++$i . "</td><td>$row[0]</td><td>{$row[1]}</td><td>{$row[2]}</td><td>";
/* 本栏位可能存在NULL值
* 根据OCI机制,NULL值将不予读取并直接跳过.如3的
*值是NULL,则数组中不会有这一项,而是直接从2跳到4
*(第四项值不为NULL时).所以在这种情况下不管是索引
*3或是'IMA021'都不存在.直接引用会报错,所以需要先
*行测试再进行引用.
*/
if (array_key_exists("IMA021", $row)) {
echo $row["IMA021"];
}
echo "</td></tr>";
}
echo "</table>";
oci_cancel($stmt); //不是必须,在此作为演示
oci_close($conn);
?>
相关文档:
有关变量的传地址赋值
PHP 3 中,变量总是传值赋值。PHP 4
提供了另外一种方式给变量赋值:传地址赋值。使用传地址赋值,即简单地追加一个(&)符号到将要赋值的变量前(源变量)。中国自学编程网,www.zxbc.cn
这意味着新的变量简单的引用了原始变量,改动新的变量将影响到原始变量,反之亦然。
<?p ......
介绍一下内联、左联、右联
一.先看一些最简单的例子
例子
Table A
aid adate
1 a1
2 a2
3 a3
TableB
bid bdate
1 b1
2 b2
4 b4
两个表a,b相连接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * ......
下面是用scott用户测试的。
如果不知道当前用户是什么用户,可以输入: show user ,这样它就显示出当前用户是什么用户了.
如果想编辑已经输入到sqlplus中的代码,可以输入“ed”,然后回车就能弹出一个记事本,记事本里面有上一步输入的代码,修改代码并保存后关闭记事本,最后在sqlplus中输入“/”并击回 ......
1.备份scott
(1)在C盘的根目录下创建一个文件夹temp
(2)在cmd在进入文件夹,del *.* ,删除所有文件。
(3)输入exp
(4)输入用户名和密码:scott/tiger
(5)就会显示“输入数组提取缓冲区大小”,在这一步直接回车就行了
(6)显示“导出文件:DXPDAT.DMP>”,这一步也是回车
( ......
ROLLUP,是GROUP BY子句的一种扩展,可以为每个分组返回小计记录以及为所有分组返回总计记录。
CUBE,也是GROUP BY子句的一种扩展,可以返回每一个列组合的小计记录,同时在末尾加上总计记录。
在文章的最后附上了相关表和记录创建的脚本。
1、向ROLLUP传递一列
SQL> select division_id,sum(salary)
2  ......