ORACLE 10G中新增的MODEL子句可以用来进行行间计算。MODEL子句允许像访问数组中元素那样访问记录中的某个列。这就提供了诸如电子表格计算之类的计算能力。
1、MODEL子句示例
下面这个查询获取2003年内由员工#21完成的产品类型为#1和#2的销量,并根据2003年的销售数据预测出2004年1月、2月、3月的销量。
select prd_type_id,year,month,sales_amount
from all_sales
where prd_type_id between 1 and 2
and emp_id=21
model
partition by (prd_type_id)
dimension by (month,year)
measures (amount sales_amount)
(
Sales_amount[1,2004]=sales_amount[1,2003],
Sales_amount[2,2004]=sales_amount[2,2003] + sales_amount[3,2003],
Sales_amount[3,2004]=ROUND(sales_amount[3,2003]*1.25,2)
)
Order by prd_type_id,year,month;
现在小分析一下上面这个查询:
partition by (prd_type_id)指定结果是根据prd_type_id分区的。
dimension by (month,year)定义数组的维度是month和year。这就意味着必须提供月份和年份才能访问数组中的单元。
measures (amount sales_amount)表明数组中的每个单元包含一个数量,同时表明数组名为sal ......
Oracle BAM全称为Oracle Busines Activity Monitoring,中文叫Oracle 业务活动监视
,BAM有两种功能
1.创建实时report
2.创建基于一定规则的alert
BAM最大的特点就是,它的功能都是实时的,任意的数据变化,他都能实时的反应到正在显示的report上去,也能立刻触发alert的发生。怎么实现这项功能呢?
1.在我们一般的系统中,report都是通过数据库查询产生的,也就是说,由report产生工具去主动查找数据,这样原理在BAM中是无法使用的,因为它要求实时,要在几秒之内用户就能看到report的变化。所以BAM采用的是被动接受数据的原理,BAM服务启动后,其它系统就可以通过BAM Adaptor/Sensor,JMS,Data Integrator,Web Services等方法把数据发送到BAM,BAM就会根据数据自动产生report。另有一种数据源,External Data Source,用来从数据库中读取数据,不过,它只在服务启动的时候读取一次,不能实时反应变化。
2.BAM的数据操作都是基于内存的,report信息都存在内存里,所以客户端来读取数据时,可以立刻从内存中拿到数据发给客户端。那内存中的数据会不会太多呢?实际上应该会比想象的少,因为BAM的report都是增量的re ......
昨天下班之前在程序中遇到了一个使用nvl的sql语句,相信这个函数大家都应该使用过,并且应该是很简单的。
因为之前做的数据库移植时遇到过这个问题,所以今天拿来在这里记载一下。
其中有一段where条件是这样的:
and ((nvl('', ' ') <> ' ' and a.benifitvchno like '%%') or
(nvl('', ' ') = ' ' and a.benifitvchno like '%'))
以上是在plsql中打出的,基本上的意思就是如果a.benifitvchno是空值的话,下面的条件会成立,
如果有值的话上面的语句会成立。实际上在nvl后面的‘’中应该是那个a.benifitvchno的值,因为在这里是空,所以显示为‘’。
这里要着重说明的是oracle对于‘’的处理默认是null的,而‘ ’才是空字符串,(前面是‘’,后面是‘ ’,这里区别是后者中间有空格),所以就是这里是有区别的,因此如果将上面语句写为都是没有空格的‘’,结果肯定是不对的。
补充:今天在csdn上问了下,
可以使用以下语句实验:
(1)
select
1
from
......
课程 一 PL/SQL 基本查询与排序
本课重点:
1、写SELECT语句进行数据库查询
2、进行数学运算
3、处理空值
4、使用别名ALIASES
5、连接列
6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS
7、ORDER BY进行排序输出。
8、使用WHERE 字段。
一、写SQL 命令:
不区分大小写。
SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。
最后以;或 / 结束语句。
也可以用RUN来执行语句
二、例1:SQL> SELECT dept_id, last_name, manager_id
2 from s_emp;
2:SQL> SELECT last_name, salary * 12, commission_pct
2 from s_emp;
对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。
SQL> SELECT last_name, salary, 12 * (salary + 100)
2 from s_emp;
三、列的别名ALIASES:
计算的时候特别有用;
紧跟着列名,或在列名与别名之间加“AS”;
如果别 ......
课程 一 PL/SQL 基本查询与排序
本课重点:
1、写SELECT语句进行数据库查询
2、进行数学运算
3、处理空值
4、使用别名ALIASES
5、连接列
6、在SQL PLUS中编辑缓冲,修改SQL SCRIPTS
7、ORDER BY进行排序输出。
8、使用WHERE 字段。
一、写SQL 命令:
不区分大小写。
SQL 语句用数字分行,在SQL PLUS中被称为缓冲区。
最后以;或 / 结束语句。
也可以用RUN来执行语句
二、例1:SQL> SELECT dept_id, last_name, manager_id
2 from s_emp;
2:SQL> SELECT last_name, salary * 12, commission_pct
2 from s_emp;
对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。
SQL> SELECT last_name, salary, 12 * (salary + 100)
2 from s_emp;
三、列的别名ALIASES:
计算的时候特别有用;
紧跟着列名,或在列名与别名之间加“AS”;
如果别 ......
课程 二 PL/SQL 查询行函数
本课重点:
1、掌握各种在PL/SQL中可用的ROW函数
2、使用这些函数的基本概念
3、SELECT语句中使用函数
4、使用转换函数
注意:以下实例中标点均为英文半角
一、FUNCTION的作用:
进行数据计算,修改独立的数据,处理一组记录的输出,不同日期显示格式,进行数据类型转换
函数分为:单独函数(ROW)和分组函数
注意:可以嵌套、可以在SELECT, WHERE, 和 ORDER BY中出现。
语法:function_name (column|expression, [arg1, arg2,...])
二、字符型函数
1、LOWER 转小写
2、UPPER
3、INITCAP 首字母大写
4、CONCAT 连接字符,相当于 ||
5、SUBSTR SUBSTR(column|expression,pos[,len])
6、LENGTH 返回字符串的长度
7、NVL 转换空值
8、 INSTR('String', 'r') 3
9. LPAD(sal,10,'*') ******5000
& ......
课程 二 PL/SQL 查询行函数
本课重点:
1、掌握各种在PL/SQL中可用的ROW函数
2、使用这些函数的基本概念
3、SELECT语句中使用函数
4、使用转换函数
注意:以下实例中标点均为英文半角
一、FUNCTION的作用:
进行数据计算,修改独立的数据,处理一组记录的输出,不同日期显示格式,进行数据类型转换
函数分为:单独函数(ROW)和分组函数
注意:可以嵌套、可以在SELECT, WHERE, 和 ORDER BY中出现。
语法:function_name (column|expression, [arg1, arg2,...])
二、字符型函数
1、LOWER 转小写
2、UPPER
3、INITCAP 首字母大写
4、CONCAT 连接字符,相当于 ||
5、SUBSTR SUBSTR(column|expression,pos[,len])
6、LENGTH 返回字符串的长度
7、NVL 转换空值
8、 INSTR('String', 'r') 3
9. LPAD(sal,10,'*') ******5000
& ......
课程三 从多个表中提取数据
本课重点:
1、SELECT from 多个表,使用等连接或非等连接
2、使用外连接OUTER JOIN
3、使用自连接
注意:以下实例中标点均为英文半角
一、连接的概念:
是指一个从多个表中的数据进行的查询。连接一般使用表的主键和外键。
连接类型:
等连接、不等连接、外连接、自连接
二、Cartesian product :
指的是当JOIN条件被省略或无效时,所有表的行(交叉)都被SELECT出来的现象。
Cartesian product可以产生大量的记录,除非是你有意如此,否则应该加上某种条件限制。
SQL> SELECT name, last_name
2 from s_dept, s_emp;
300 rows selected. 其中一个表12行,一个表25行。
三、简单连接查询:
SELECT table.column, table.column...
from table1, table2
WHERE table1.column1 = table2.column2;
如:SQL> SELECT s_emp.last_name, s_emp.dept_id,
2 s_dept.name
3 from s_emp, s_dept
4 WHERE s_emp.dept_id = s_dept.id;
注意:表前缀的重要性:
SQL> SELECT s_dept.id ”Dep ......
课程三 从多个表中提取数据
本课重点:
1、SELECT from 多个表,使用等连接或非等连接
2、使用外连接OUTER JOIN
3、使用自连接
注意:以下实例中标点均为英文半角
一、连接的概念:
是指一个从多个表中的数据进行的查询。连接一般使用表的主键和外键。
连接类型:
等连接、不等连接、外连接、自连接
二、Cartesian product :
指的是当JOIN条件被省略或无效时,所有表的行(交叉)都被SELECT出来的现象。
Cartesian product可以产生大量的记录,除非是你有意如此,否则应该加上某种条件限制。
SQL> SELECT name, last_name
2 from s_dept, s_emp;
300 rows selected. 其中一个表12行,一个表25行。
三、简单连接查询:
SELECT table.column, table.column...
from table1, table2
WHERE table1.column1 = table2.column2;
如:SQL> SELECT s_emp.last_name, s_emp.dept_id,
2 s_dept.name
3 from s_emp, s_dept
4 WHERE s_emp.dept_id = s_dept.id;
注意:表前缀的重要性:
SQL> SELECT s_dept.id ”Dep ......