Quantcast
Channel: CSDN博客推荐文章
Viewing all articles
Browse latest Browse all 35570

PHP开发与Oracle数据库关联的一些问题

$
0
0
oracle 的字段, 在不加引号时, 全部默认转换成大写.

加引号时, 则不会自动转换, 写成什么样就是什么样, 在引用该字段时,如果大小写不匹配则报错 ORA-00904: "id": invalid identifier

由于存在上述特性,则可能出现2个字段名称一样的现象

Oracle的所有命令、语句、对象名及各种名称对大小不敏感。只有对具体数据是敏感的。所以在条件查询进行字符比较时,一定要区分大小写。直观地说单引号里的内容是分大小写的。

PHP之Oracle相关函数返回的结果集中,字段名默认是大写的,比如oci_fetch_array方法,这时候,在呈现数据view之前一般可以通过array_change_key_case($row,CASE_UPPER)进行转换。

Oracle SQL语句的minus是对两个select结果集取差集,取交集的是intersect。minus的作用简单来说是去同留异,取差集。例:select * from table where rownum<10
minus select * from table where rownum<5;
另外再补充一下rownum的用法:rownum也就是伪列,在创建表的时候自动为每个记录分配一个rownum,每个记录对应一个唯一的rowid,每个表都有伪列,做条件的时候有几个注意点:在实际中rownum只能等于1,只能大于0,可以小于任何正整数。

Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

Union All,对两个结果集进行并集操作,包括重复行,不进行排序;

Intersect,对两个结果集进行交集操作,不包括重复行,同时进行默认规则的排序;

Minus,对两个结果集进行差操作,不包括重复行,同时进行默认规则的排序。

可以在最后一个结果集中指定Order by子句改变排序方式。

PHP中有两个内建的函数:count() 和sizeof(),可以实现得到数组的长度.

遇到错误提示ORA-01747: invalid user.table.column, table.column, or column specification
注意一般是因为表字段用了关键字。可以用编缉表模式,查看viewsql。关键字会突出显示的。

Oracle 调用聚合函数在错误用法:如果查询中包含一个聚合函数,而 所选择的列 并 不在聚合函数中,那么这些列就必须在GROUP BY子句中;否则就会出现下面的错误:ORA-00937: not a single-group group function。
还有,不能在WHERE子句中使用聚合函数来限制行。如果这样做,就会出现下面的错误:ORA-00934: group function is not allowed here。例如:
下面这个查询选择product_type_id列和AVG(price),但是却没有使用一个包含 product_type_id的GROUP BY子句:

SQL> SELECT product_type_id, AVG(price)
2 FROM products;
SELECT product_type_id, AVG(price)
*
ERROR at line 1:
ORA-00937: not a single-group group function

之所以会出现这个错误是因为数据库不知道怎样在结果集中处理product_type_id列。考虑一下:这个查询既试图使用AVG聚合函数对多行记录进行操作,却又试图从每行中获得product_type_id列的值;这两个操作是不可能同时完成的。此时必须提供一个GROUP BY子句告诉数据库将product_type_id列相同的行分组在一起,然后数据库就可以将这些组中的行传递给AVG函数。

警告:如果查询中包含聚合函数,而所选择的列并不在聚合函数中,那么这些列就必须在GROUP BY子句中。

SQL> SELECT product_type_id, AVG(price)
2 FROM products
3 WHERE AVG(price) > 20
4 GROUP BY product_type_id;
WHERE AVG(price) > 20
*
ERROR at line 3:
ORA-00934: group function is not allowed here

之所以会出现这个错误是因为WHERE子句只能用来对单行而不是行组进行过滤。要过滤行组,可以使用HAVING子句。

---------------------

关于Oracle分页具体可以参考以下文章

Oracle分页(limit方式的运用)  http://blog.163.com/yongqi0408@126/blog/static/4251263220087432522770/
ORACLE分页SQL语句 http://www.cnblogs.com/hxw/archive/2005/09/11/234619.html
Oracle分页查询语句http://yangtingkun.itpub.net/post/468/100278
作者:freshlover 发表于2013-3-15 19:49:53 原文链接
阅读:0 评论:0 查看评论

Viewing all articles
Browse latest Browse all 35570

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>