Oracel 基本知
一、ERP
ERP是Enterprise Resource Planning (企业资源计划)简称,是上个世纪90年代美国一家IT公司根据当时计算机信息、IT技术发展及企业对供应链管理的需求,预测在今后信息时代企业管理信息系统的发展趋势和即将发生变革,而提出了这个概念。
一种ERP系统
ERP是针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件。一个由 Gartner Group 开发的概念,描述下一代制造商业系统和制造资源计划(MRP II)软件。它将包含客户/服务架构,使用图形用户接口,应用开放系统制作。除了已有的标准功能,它还包括其它特性,如品质、过程运作管理、以及调整报告等。特别是,ERP采用的基础技术将同时给用户软件和硬件两方面的独立性从而更加容易升级。ERP的关键在于所有用户能够裁剪其应用,因而具有天然的易用性。
?
二、OSB(oracle service bus):
学习Service Bus的第一个问题一定是,ALSB或者说OSB能做什么,或者说为什么需要OSB,对于这个问题的疑问在于在所谓的service-enable企业里,既然已经有了所谓的拥有建立Web Service的平台(如Weblogic应用服务器),那我们还缺什么东西呢?
??? OSB里对于这些疑问的第一个回答是:如果一个应用直接面对各个平台和应用服务器上创建的Web Service进行重用,会面临的一种情况是,当Web服务所在的平台有所变动(如IP地址),则所有调用该服务的应用都需要进行改动,所以OSB的第一个功能是“虚拟化企业里的服务”,也就是所有的服务会由OSB里的一个虚拟端点来表示,而应用只需要连接在OSB里的虚拟服务端点,由OSB在运行的时候来定位实际的服务在哪里,我个人以为这个观点并不能够让人信服,因为如果企业里使用一个Service Registry的话,对于服务的定位本身就是动态的,服务地址的改变可以由Service Registry进行反应。当然,无论是OSB来做这个虚拟化,还是Service Registry来做这个虚拟化,总需要有一个产品来做这个事情!
???? 而另一种对于OSB的描述可能更让人信服,就是OSB的目的就是Connect,Enrich&Transform,Distribute:
??? Connect的含义是OSB会提供多种协议的接入方式,如对于数据库,OSB会提供比如DBAdapter的接入的手段,对于JMS,OSB会提供JMS Adapter接入的手段,甚至对于ERP等应用产品,OSB也会提供相应的接入的手段,当然反过来也一样,也就是说OSB同样也可以针对以上的多种协议和数据源进行输出,所以Connect的一个含义是,“多协议接入,多协议输出”,这种含义也隐含着OSB可以进行协议转换,比如接入是email的SMTP协议,输出是http协议,而OSB需要处理SMTP到http协议的转换,阐述这个含义的一张图是:
??? 而Transform的另一个含义是应用A的输出是某一种格式,但是并不符合应用B的输入格式,则OSB需要对于格式也进行转换,让应用A也能够和应用B进行对话。
??? Distribute的含义则是OSB可以根据预先定义的规则去找到相应的服务,如符合规则A,则把消息发到服务Svc1,符合规则B,则把消息发到服务Svc2。
??? 在所有这些描述中,实际上OSB的核心是一个消息处理引擎,对于应用的服务请求(典型的如SOAP消息),按照正确的规则去了解消息的内容,处理之后把消息发给正确的处理者,然后需要记录处理的结果(中间结果),再协调请求者和被请求者的关系,在两个或者多个本来没有设计为互相调用的服务间提供互相调用并监控他们的相互调用。
??? 因为一般而言在一个企业里总会使用IT发展不同时期的产品,它们可能都使用了不同的技术和协议,而这些不同时期的产品的相互对话是现代企业有效利用信息技术的一个必然结果,所以就出现了Service Bus这种可以和各种协议和技术打交道的产品,这就好像是为说不同语言人之间提供的一个翻译器,从而使沟通成为可能,并且为选择以后的产品提供了一个必须符合的最低标准!
?
三、财务资源管理
? 此模块共分GL(总账)/AP(应付)/AR(应收)/FA(固定资产)四个小模块,统称finanical(财物模块)。
四、需要了解的基础语句。
1.游标(cursor)
?
??使用cursor时请注意:
? 一般情况下:
①.打开游标?? open cursor
②.取游标??? fetch cursor(name) into cursor_record
③.关闭游标? close cursor
?
?
特殊情况:
? 如果用for来使用游标,则不需要打开游标和关闭游标直接使用如下:
?
FOR cursor_record IN cursor LOOP
?? cursor_record …
END Loop;
2.function/PROCEDURE/body
? 请参考例子程序。
3. RANK(), dense_RANK(),ROW_NUMBER()的区别
E_ID
RANK
ROW_NUMBER
DENSE_RANK
10
1
1
1
1001
2
2
2
1001
2
3
2
1001
2
4
2
100101
5
5
3
100102
6
6
4
100103
7
7
5
100201
8
8
6
100202
9
9
7
100203
10
10
8
11
11
11
9
1101
12
12
10
110101
13
13
11
1104
14
14
12
1104
14
15
12
1104
14
16
12
?
数据结果 可以确认 rank 不连续的排序
ROW_NUMBER全部连续
DENSE_RANK重复的排序 连续排序
4.Forall
declare
? cursor lc
? is
? select * from emp;
? type rec_ttype is table of a%rowtype index by pls_integer;
? rec_tbl rec_ttype;
? ln_cnt number;
? ln_cnt2 number;
begin
? for rec in lc loop
??? ln_cnt := 2*(lc%rowcount-1) + 1;
??? ln_cnt2 := 2*(lc%rowcount-1) + 2;
??? rec_tbl(ln_cnt).empno := rec.empno;
??? rec_tbl(ln_cnt).ename := rec.ename;
??? rec_tbl(ln_cnt).job := rec.job;
??? rec_tbl(ln_cnt).mgr := rec.mgr;
??? rec_tbl(ln_cnt).hiredate := rec.hiredate;
??? rec_tbl(ln_cnt).sal := rec.sal;
??? rec_tbl(ln_cnt).comm := rec.comm;
??? rec_tbl(ln_cnt).deptno := rec.deptno;
??? rec_tbl(ln_cnt2)???? := rec_tbl(ln_cnt);
??? rec_tbl(ln_cnt2).ename := 'fl_'||to_char(rec_tbl.count);
? end loop;
? forall i in 1..rec_tbl.count
??? insert into a
??? values rec_tbl(i);
end;
/
5.Oracle定义类别和数组
DECLARE
TYPE LIST_NAME IS TABLE OF VARCHAR2(100);
LIST_TBL LIST_NAME;
BEGIN
LIST_TBL := LIST_NAME(); -- 初始化必须
LIST_TBL := LIST_NAME( 'FENG LEI', 'LI RUOFEI', 'LIU YUEFANG');
LIST_TBL.EXTEND;?? -- 扩张空间使用
LIST_TBL.EXTEND;
LIST_TBL(4) := 'LI RUOFEI2';
LIST_TBL(5) := 'LI RUOFEI;
LIST_TBL := SET(LIST_TBL);?? -- 重复数据过滤
FOR i IN 1..LIST_TBL.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(LIST_TBL(i));
END LOOP;
end;
/
?
6.CHR?
给出整数,返回对应的字符;?
SQL>?select?chr(54740)?zhao,chr(65)?chr65?from?dual;?
ZH?C?
--?-?
赵?A?
7.CONCAT?
连接两个字符串;?
SQL>?select?concat('010-','88888888')||'转23'?高乾竞电话?from?dual;?
高乾竞电话?
----------------?
010-88888888转23?
8.INITCAP?
返回字符串并将字符串的第一个字母变为大写;?
SQL>?select?initcap('smith')?upp?from?dual;?
UPP?
-----?
Smith?
9.INSTR(C1,C2,I,J)?
在一个字符串中搜索指定的字符,返回发现指定的字符的位置;?
C1?被搜索的字符串?
C2?希望搜索的字符串?
I?搜索的开始位置,默认为1?
J?出现的位置,默认为1?
SQL>?select?instr('oracle?traning','ra',1,2)?instring?from?dual;?
INSTRING?
---------?
9?
10.LENGTH?
返回字符串的长度;?
SQL>?select?name,length(name),addr,length(addr),sal,length(to_char(sal))?from?gao.nchar_tst;?
NAME?LENGTH(NAME)?ADDR?LENGTH(ADDR)?SAL?LENGTH(TO_CHAR(SAL))?
------?------------?----------------?------------?---------?--------------------?
高乾竞?3?北京市海锭区?6?9999.99?7?
11.LOWER?
返回字符串,并将所有的字符小写?
SQL>?select?lower('AaBbCcDd')AaBbCcDd?from?dual;?
AABBCCDD?
--------?
aabbccdd?
12.UPPER?
返回字符串,并将所有的字符大写?
SQL>?select?upper('AaBbCcDd')?upper?from?dual;?
UPPER?
--------?
AABBCCDD?
13.RPAD和LPAD(粘贴字符)?
RPAD?在列的右边粘贴字符?
LPAD?在列的左边粘贴字符?
SQL>?select?lpad(rpad('gao',10,'*'),17,'*')from?dual;?
LPAD(RPAD('GAO',1?
-----------------?
*******gao*******?
不够字符则用*来填满?
14.LTRIM和RTRIM?
LTRIM?删除左边出现的字符串?
RTRIM?删除右边出现的字符串?
SQL>?select?ltrim(rtrim('?gao?qian?jing?','?'),'?')?from?dual;?
LTRIM(RTRIM('?
-------------?
gao?qian?jing?
15.SUBSTR(string,start,count)?
取子字符串,从start开始,取count个?
SQL>?select?substr('13088888888',3,?from?dual;?
SUBSTR('?
--------?
08888888?
16.REPLACE('string','s1','s2')?
string?希望被替换的字符或变量?
s1?被替换的字符串?
s2?要替换的字符串?
SQL>?select?replace('he?love?you','he','i')?from?dual;?
REPLACE('H?
----------?
i?love?you?
17.SOUNDEX?
返回一个与给定的字符串读音相同的字符串?
SQL>?create?table?table1(xm?varchar();?
SQL>?insert?into?table1?values('weather');?
SQL>?insert?into?table1?values('wether');?
SQL>?insert?into?table1?values('gao');?
SQL>?select?xm?from?table1?where?soundex(xm)=soundex('weather');?
XM?
--------?
weather?
wether?
18.TRIM('s'?from?'string')?
LEADING?剪掉前面的字符?
TRAILING?剪掉后面的字符?
如果不指定,默认为空格符?
19.ABS?
返回指定值的绝对值?
SQL>?select?abs(100),abs(-100)?from?dual;?
ABS(100)?ABS(-100)?
---------?---------?
100?100?
?
?
20.Over (oracle的分析函数over 及开窗函数)
一:分析函数over
????? 对于每个组返回多行,而聚合函数对于每个组只返回一行。
???? 下面通过几个例子来说明其应用。???????????????????????????????????????
1:统计某商店的营业额。????????
???? date?????? sale
???? 1?????????? 20
???? 2?????????? 15
???? 3?????????? 14
???? 4?????????? 18
???? 5?????????? 30
??? 规则:按天统计:每天都统计前面几天的总额
??? 得到的结果:
??? DATE?? SALE?????? SUM
??? ----- -------- ------
??? 1????? 20??????? 20?????????? --1天???????????
??? 2????? 15??????? 35?????????? --1天+2天???????????
??? 3????? 14??????? 49?????????? --1天+2天+3天???????????
??? 4????? 18??????? 67??????????? .??????????
??? 5????? 30??????? 97??????????? .
?????
2:统计各班成绩第一名的同学信息
??? NAME?? CLASS S?????????????????????????
??? ----- ----- ----------------------
??? fda??? 1????? 80?????????????????????
??? ffd??? 1????? 78?????????????????????
??? dss??? 1????? 95?????????????????????
??? cfe??? 2????? 74?????????????????????
??? gds??? 2????? 92?????????????????????
??? gf???? 3????? 99?????????????????????
??? ddd??? 3????? 99?????????????????????
??? adf??? 3????? 45?????????????????????
??? asdf?? 3????? 55?????????????????????
??? 3dd??? 3????? 78??????????????
???
??? 通过:???
??? --
??? select * from???????????????????????????????????????????????????????????????????????
??? (????????????????????????????????????????????????????????????????????????????
??? select name,class,s,rank()over(partition by class order by s desc) mm from t2
??? )????????????????????????????????????????????????????