一、WWW原理简介
URL: Uniform Resource Locator
HTTP: Hyper Text Transfrer Protocol
HTML: Hyper Text Markup Language
二、Oracle Application Server概述
三、Oracle Application Server 服务器启动
在操作系统下命令启动:
$ owsctl start // 启动OAS服务器
$ owsctl start -nodemgr // 启动OAS管理节点
管理节点:
IP: 75.64.23.40:8888 //管理节点的端口号为8888
管理员用户:Admin
四、Oracle Application Server 原理简介
http://www.oracle.com/news.html // 静态页面
http://www.oracle.com:121/cgi/plsql/p_query.go // 动态页面
五、Oracle Application Server 配置步骤:
1、加载PL/SQL 程序包(通过IE登录到OAS的远程管理节点):
http://ntsvr1:8888/ (配置方法:在c:/windows目录下建立文本文件hosts,内容为:75.64.23.40 ntsvr1)
OAS实用程序-> 安装 -> PL/SQL工具包 -> 数据库连接串 -> sys用户口令 -> 应用。
如果OAS与Oracle服务器在一台机器上,则使用Oracle_SID,否则要使用连接串。
2、创建HTTP监听进程
在创建HTTP监听进程时,需要确定的信息:
监听进程的名称
端口号:(1 - 16653 之间)
主机名称:
3、创建DAD(Data Access Description)数据存取描述器,建立OAS与数据库之间的连接
Oracle Application Server => DB存取描述
需要确定的信息:
。名称:
。合法的数据库用户名及口令
。数据库位置:
。网络连接串名
4、创建应用:
选择应用程序所使用的语言:PL/SQL
应用程序名:mis01
应用的状态标志一般为红旗,没有关系。
5、创建插件。确定信息如下:
。插件名称:mis01
。显示名称: 人员工资信息
。虚拟路径:/cgi/plsql //这里怎么设置,用户在输入时就要怎样输入URL
。物理路径: %ORAWEB_HOME%/bin
。所连接的数据库信息:通过DAD确定(下拉菜单选择)
用户输入URL范例:http://75.64.23.40:1234/cgi/plsql/p_test
[***]所有配置结束后,重新加载OAS。
六、使用PL/SQL开始Web页面
1、标记函数:
htp.htmlOpen <HTML>
htp.htmlClose </HTML>
htp.headOpen <HEAD>
htp.headClose </HEAD>
htp.bodyOpen <BODY>
htp.bodyClose </BODY>
htp.comment <!-- -->
2、PL/SQL过程、函数、包:
owa_cookie
owa_image
owa_util
owa_opt_lock
owa_pattern
owa_sec
owa_text
3、
HTML:
<html>
<head>
<title>欢迎使用Oracle Application Server</title>
</head>
<body><p>
<strong>欢迎使用Oracle Application Server!</strong></p>
</body>
</html>
对应的PL/SQL程序:
Create or Replace Procedure P_ShowExample AS
BEGIN
htp.htmlopen;
htp.headopen;
htp.title('Oracle Application Server 4.0!');
htp.headclose;
htp.bodyopen;
htp.strong('欢迎使用Oracle Application Server!');
htp.bodyclose;
htp.htmlclose;
END;
在SQL*Plus中运行上面的程序创建相应的存储过程。
4、显示数据库中基表的数据:P_TEST.sql
Create or Replace Procedure P_Test AS
ignore boolean;
BEGIN
htp.htmlopen;
htp.headopen;
-- htp.title('Display the Current Users in Oracle Database!');
htp.headclose;
htp.bodyopen;
htp.header(1, ' 输出数据库基表中数据');
ignore := owa_util.tableprint('emp','BORDER',owa_util.html_table);
htp.bodyclose;
htp.htmlclose;
END;
5、动态数据基表名称:P_query.sql
运行方法:http://75.64.23.40:1234/cgi/plsql/p_query.go
6、webalchy.exe: //可以将标准的html文件转换成PL/SQL程序。
7、使用列表项,选择部门编码:P_Select.sql
http://75.64.23.40:1234/cgi/plsql/p_select.go
[C*] owa_util.TablePrint函数用法
owa_util.tablePrint(c1,c2,c3,c4,c5,c6,c7,c8)
其中:
c1: 表名。例如:'emp'
c2: 是否有表格线。'BORDER'
C3: 表格的格式。owa_util.html_table
c4: 基表中的列名。缺省为'*',即所有列
c5: where语句:例如:'where deptno = '||v_deptno||' or sal > '||v_sal|| 'order by sal',
c6: 列名的别名
c7: 最少显示多少行,0(全部显示)
c8: 最大显示多少行,缺省为NULL。
8、输入员工编码,显示员工信息:P_empno.sql
9、多个选择项:列表项及文本框输入:P_Mselect.sql
10、使用无线组(Radio Group) 显示部门信息:P_rselect.sql
11、向数据库中录入员工信息:P_input.sql
[Report Builder 报表设计]
一、创建一个简单的报表:
Report Builder -> 工具 -> 报表编辑器 -> 新建查询
然后布局向导创建布局。
预览界面->点左上角图标 -> 数据模型 -> 再点左上角图标 -> 预览界面
二、创建分组报表
在数据模型界面拖动要分组的列到列外即可创建分组。
1、增加公式列(水平方向计算):
数据模型->左边工具栏中公式计算图标。
return :sal + nvl(:comm,0);
2、增加汇总列(垂直方向计算):
每次有新列(域)增加后,都要在数据模型主窗口->鼠标右键->报表向导中进行适当的修改。
三、布局设计(Layout)
1、报表向导->标签:修改标签为中文
2、视图->布局模型
编辑->选择全部
左边工具栏->添充颜色,格式->字体
页边距:相当于页眉,顶部工具栏中按钮。
在增加文本框时,如果默认字体不是中文,请先在格式->字体中设置为中文字体,然后再输入。
双击域可以设置字段属性。
四、创建主从型报表:使用主从型 藏青创建主从型报表
1、在对象导航器->报表->新建->手动,进入数据模型窗口。
2、SQL:
(1)select * from dept
(2) select * from emp
(3)点击左边纵向工具栏中“数据链接”:从dept.deptno 拖动到emp.deptno1放开,建立数据链接。
(4)报表向导
。风格:上边分组。
。组:两个组均是纵向
。域:除了重复的deptno1之外都要
。模板:无模板。
3、在布局模型中调整表格结构
五、创建矩阵报表:
1、构造矩阵报表至少需要四个组:
一个横向显示数据的组
一个纵向显示数据的组
一个在交叉点显示数据的组
一个矩阵单元组
2、操作步骤:
(1)手动创建一个报表。
(2) SQL1:select deptno, job, sum(sal) from emp group by deptno,job;
(3) 将deptno和job拖出成为两个分组的条件。
(4) 点击左方工具栏交叉单元按钮,将G_2.DEPTNO 与 G_3.job括起来,这样成为一个G_4交叉组。
(5) 报表向导
风格:矩阵
单元:sum_sal
总计:总和(sum_sal)
模板:无
(6) 布局模型重新布局。
六、分组矩阵报表:
(1)手动创建一个报表。
(2) SQL1:select To_Char(hiredate, 'yyyy') year, deptno, job, sum(sal) from emp group by To_Char(hiredate,'yyyy'), deptno, job;
Q_emp, G1
(3) 将Year,deptno和job拖出成为三个分组的条件。G_year, G_deptno, G_sulsal, G_job, G_cross
(4) 点击左方工具栏交叉单元按钮,将G_3.DEPTNO 与 G_4.job括起来,这样成为一个G_5交叉组。
(5) 报表向导
风格:分组矩阵
[Graphics Builder 图表设计]
一、创建饼图(Pie):
1、打开Graphics Builder,连接数据库。
菜单:图表->创建图表
2、输入SQL语句确定数据源:select deptno, sum(sal) from emp group by deptno; -> 执行 ->确定
3、图表:饼图,名称:Pie
4、菜单:图表->框架->饼框架->显示数据值,显示百分比值
可以修改所显示数据值的字体、颜色等。可以修改饼图的框架、侧面及阴影的填充颜色等。
二、创建列图(Column):
1. SQL: select ename, sal from emp
2. 名称:column
图表框架: 深度尺寸,阴影尺寸,阴影方向。显示绘图框架(选中),显示图例(去掉)。
侧面、顶部、阴影的填充颜色,不要修改正面的填充颜色。
双击两个坐标轴可以设置坐标轴属性,去掉“显示坐标轴标签”
3. 画一个矩形将图表括起来,填充颜色然后置后,给图表加上标题。
三、创建主从型图表(Drill-Down):
1、创建主图:pie
select deptno, sum(sal) from emp group by deptno
2、创建参数
导航器-> 参数 -> 新增
名称:n
类型:数字
初始值: 10
3、使用参数创建子图
新建图表-> 新建查询 -> select ename, sal from emp where deptno=:n; // 将参数n放入第二个查询中。
子图名:column
4、建立两个图表之间的关系
选饼图中心双击->对象属性->细化:
设置参数:N
对于值:DEPTNO
执行查询:query1(新建的子查询)
5、运行
四、图表切割:
选饼图中心双击->对象属性
过程->编辑
rrow number;
chart og_object;
BEGIN
chart := Og_Get_Object('pie'); // 将名为pie的图表放到chart变量中。
rrow := Og_Get_Row(HITOBJ);
Og_Set_Explosion(chart, rrow, 'deptno', 50); // 切割的距离为50个小数点
Og_update_Chart(Chart, OG_ALL_CHUPDA);
End;
[Developer/2000集成]
一、Form调用Report:
1、创建一个含有参数的报表:r11
2、在Form中调用Report:(Form以前面建立的Form1 (Form3)为例)。
报表打印按钮的WHEN-BUTTON-PRESSED脚本:
Declare
pl_id paramlist;
Begin
pl_id := Create_Parameter_List('tmpdata');
Add_Parameter(pl_id, 'dno', TEXT_PARAMETER, To_Char(:deptno));
Add_Parameter(pl_id,'paramform',TEXT_PARAMETER,'no');
Run_Product(REPORTS,'e:/xyf/r11.rdf',
ASYNCHRONOUS,RUNTIME,FILESYSTEM,pl_id,null);
Destroy_Parameter_List(pl_id);
End;
二、Form 调用Graphics:
1、创建一个含有参数的图表
select ename, sal from emp where deptno = :dpt;
2、在Form中创建图表项
3、编写触发器调用图表
访问表空间权限控制:
去掉用户对某个表空间的访问权限
ALTER USER ZYIBSS QUOTA 0 ON IBMS_DATA_DATA;
ALTER USER ZYIBSS QUOTA 0 ON IBMS_DATA_IDX;
增加用户对某个表空间的访问权限
ALTER USER ZYIBSS QUOTA UNLIMITED ON IBMS_DF_DATA;
移动表空间:
alter table tcm-user move tablespace ibms-data-data
append是优化提示器,这个最好不用,你可以用并行提供来做
insert /*+parallel(emp,2) */ into emp nologging 2是代表什么啊?
2是用2个CPU来并发做事
这个有什么好处,可以加快速度?还是 ?
能允分利用多处理器的好处喽
会明显变快的
看你的主机是多少CPU的了,我最多用16
反正690有12个cpu
也可以使用索引提示
怎么用??
如果用到某个table的索引
/*+ index(字段名) */
提前告诉优化器要用到的索引是吗?
/*+ index(table名,字段名)*?
是的,有时你现成的索引,oracle不一定会用,指定后oracle尽量用你指定的索引
还有什么好东西啊?大哥啊。给我点资料有不咯?呵呵
/*+ index(table名,字段名)*/这个是放在select语句里吗 ??放在什么位置啊
放在第一个关健字后�b
我用了/*+parallel(emp,2) */还要用 NOLOGGING吗??
也可以用
爽,谢谢。不过很抱歉。今天因为我多加了个/*+append*/使的tcm-cust-rela增大了100多倍,造成表空间不够,所以数据还没有出来,我刚才才通过测试找出来。
优化器多时oracle会根据实际情况选择一个来用
INSERT /*+parallel(TCM_CUST,2) */ INTO TCM_CUST NOLOGGING (字段)values(值) 这种写法对不?
关于这方面的书,我明天找一下,如果有我发给你,我手头上有一本事,但讲的很少。
好。我现在给你们准备数据。郁闷啊。浪费了一天的时间。
这样很快的
690一共12个cpu ,我填10个会不会有问题啊?
晚上别熬的太晚了
没事,oracle有大量的并发能力,关健要看数据有没有把值设的大一点,现在业务少,可以这么做
select * from (select rownum as aa, a.* from tcm_user a where rownum<100) where aa>10
关于Oracle中的时间计算问题!
--------------------------------------------------------------------------------
to_date('2003-8-1 18:20', 'yyyy-mm-dd HH24:MI') - to_date('2003-7-3 18:35', 'yyyy-mm-dd HH24:MI')
得到一个值,如何将得到的值转化为分钟?也就是说它们两个值之间相差的分钟?
--------------------------------------------------------------------------------
(to_date('2003-8-1 18:20', 'yyyy-mm-dd HH24:MI') - to_date('2003-7-3 18:35', 'yyyy-mm-dd HH24:MI'))*24*60
(dateA-dateB)*1440 = N 分
(dateA-dateB)*86400 = N 秒
round()四舍五入
ceil()大于n的最小整数
如果不小心把表给delete掉了并且commit了,不要紧,你可以用如下语句进行恢复
select * from tfm_action_list as of timestamp (systimestamp -interval'4000'second)