资源描述
一、数据库 2
1、Oracle中LOB数据类型 2
2、oracle文件物理位置 2
3、 oracle权限列表 2
4、Oracle开发者权限 4
5、PL/SQL中,对象类型调用的方法 5
6、populate_group_with_query Built-in 5
7、游标的使用 9
8、ALERT LOG文件 11
9、外部连接和自联接 11
10、DBA视图 13
11、触发器 14
12、PL/SQL三种类型的集合 18
13、纯度级别 22
14、存储过程中的变量声明 22
15、oracle物理结构 22
二、软件工程 23
1、smp 系统介绍 23
2、死锁条件 23
3、软件测试流程 23
4、进程和线程 24
5、计算机辅助工程 25
6、类的概念 25
7、类的封装性 25
8、类的继承 26
9、程序设计语言的分类 26
10、软件测试计划评审会参加人员 26
11、什么是shell 26
12、操作系统并行工作的基本单位 27
13、cd命令 27
14、插入排序 27
15、冒泡排序 31
16、二叉树 32
17、extends和 implements 33
18、HTML语言 34
19、CMM标准 34
20、URL怎样表示路径 36
21、软件建模介绍 37
22、ClearCase基础知识 40
三、JAVA基础 41
1、垃圾回收语句 41
2、java反射机制…………………………………………………………………………….55
3、javaMail实现…………………………………………………………………………….55
4、java如何操作XML……………………………………………………………………..69
四、测试 42
1、软件测试中首先要进行的测试 42
2、软件测试的方法: 50
一、数据库
1、Oracle中LOB数据类型
Oracle 8i以后的版本: 一个表只能有一个LONG ,LONG RAW列(Max is 2G),但可以有多个LOB列(BLOB,CLOB)。
保存长文本,使用LOB字段,其中BLOB是二进制型---视频,音频,CLOB是字符型--文本。
2、oracle文件物理位置
数据存放于data file文件中;
目录存放于硬盘中的指定位置;
表存放于data file文件中中;
视图没有数据,只是一句sql语句与表一样存放与data file中。
3、 oracle权限列表
alter any cluster 修改任意簇的权限
alter any index 修改任意索引的权限
alter any role 修改任意角色的权限
alter any sequence 修改任意序列的权限
alter any snapshot 修改任意快照的权限
alter any table 修改任意表的权限
alter any trigger 修改任意触发器的权限
alter cluster 修改拥有簇的权限
alter database 修改数据库的权限
alter procedure 修改拥有的存储过程权限
alter profile 修改资源限制简表的权限
alter resource cost 设置佳话资源开销的权限
alter rollback segment 修改回滚段的权限
alter sequence 修改拥有的序列权限
alter session 修改数据库会话的权限
alter sytem 修改数据库服务器设置的权限
alter table 修改拥有的表权限
alter tablespace 修改表空间的权限
alter user 修改用户的权限
analyze 使用analyze命令分析数据库中任意的表、索引和簇
audit any 为任意的数据库对象设置审计选项
audit system 允许系统操作审计
backup any table 备份任意表的权限
become user 切换用户状态的权限
commit any table 提交表的权限
create any cluster 为任意用户创建簇的权限
create any index 为任意用户创建索引的权限
create any procedure 为任意用户创建存储过程的权限
create any sequence 为任意用户创建序列的权限
create any snapshot 为任意用户创建快照的权限
create any synonym 为任意用户创建同义名的权限
create any table 为任意用户创建表的权限
create any trigger 为任意用户创建触发器的权限
create any view 为任意用户创建视图的权限
create cluster 为用户创建簇的权限
create database link 为用户创建的权限
create procedure 为用户创建存储过程的权限
create profile 创建资源限制简表的权限
create public database link 创建公共数据库链路的权限
create public synonym 创建公共同义名的权限
create role 创建角色的权限
create rollback segment 创建回滚段的权限
create session 创建会话的权限
create sequence 为用户创建序列的权限
create snapshot 为用户创建快照的权限
create synonym 为用户创建同义名的权限
create table 为用户创建表的权限
create tablespace 创建表空间的权限
create user 创建用户的权限
create view 为用户创建视图的权限
delete any table 删除任意表行的权限
delete any view 删除任意视图行的权限
delete snapshot 删除快照中行的权限
delete table 为用户删除表行的权限
delete view 为用户删除视图行的权限
drop any cluster 删除任意簇的权限
drop any index 删除任意索引的权限
drop any procedure 删除任意存储过程的权限
drop any role 删除任意角色的权限
drop any sequence 删除任意序列的权限
drop any snapshot 删除任意快照的权限
drop any synonym 删除任意同义名的权限
drop any table 删除任意表的权限
drop any trigger 删除任意触发器的权限
drop any view 删除任意视图的权限
drop profile 删除资源限制简表的权限
drop public cluster 删除公共簇的权限
drop public database link 删除公共数据链路的权限
drop public synonym 删除公共同义名的权限
drop rollback segment 删除回滚段的权限
drop tablespace 删除表空间的权限
drop user 删除用户的权限
execute any procedure 执行任意存储过程的权限
execute function 执行存储函数的权限
execute package 执行存储包的权限
execute procedure 执行用户存储过程的权限
force any transaction 管理未提交的任意事务的输出权限
force transaction 管理未提交的用户事务的输出权限
grant any privilege 授予任意系统特权的权限
grant any role 授予任意角色的权限
index table 给表加索引的权限
insert any table 向任意表中插入行的权限
insert snapshot 向快照中插入行的权限
insert table 向用户表中插入行的权限
insert view 向用户视图中插行的权限
lock any table 给任意表加锁的权限
manager tablespace 管理(备份可用性)表空间的权限
references table 参考表的权限
restricted session 创建有限制的数据库会话的权限
select any sequence 使用任意序列的权限
select any table 使用任意表的权限
select snapshot 使用快照的权限
select sequence 使用用户序列的权限
select table 使用用户表的权限
select view 使用视图的权限
unlimited tablespace 对表空间大小不加限制的权限
update any table 修改任意表中行的权限
update snapshot 修改快照中行的权限
update table 修改用户表中的行的权限
update view 修改视图中行的权限
4、Oracle开发者权限
应用程序开发者有一下两种权限:
A free development
应用程序开发者允许创建新的模式对象,包括table,index,procedure,package等,它允许应用程序开发者开发独立于其他对象的应用程序。
B controlled development
应用程序开发者不允许创建新的模式对象。所有需要table,indes procedure等都由数据库管理者创建,它保证了数据库管理者能完全控制数据空间的使用以及访问数据库信息的途径。但有时应用程序开发者也需这两种权限的混和。
5、PL/SQL中,对象类型调用的方法
PL/SQL中,对象类型调用的方法?MEMBER、STATIC、ORDER、MAP
答案:
[{MAP ORDER} MEMBER function_name,] ---排序函数
[{FINAL NOT FINAL} MEMBER function_name,] ---可否继承的成员函数
[{INSTANTIABLE NOT INSTANTIABLE } MEMBER function_name,] ---可否实例化的成员函数
[{MEMBER STATIC } function_name,] ---静态、非静态成员函数
6、populate_group_with_query Built-in
描述:
Populates a record group with the given query. The record group is cleared and rows that are fetched replace any existing rows in the record group.
If the SELECT statement fails, Oracle Forms returns an ORACLE error number, which can be tracked with SQLERRM,
if you change the sign to -. If the query is successful, this Built-in returns 0 (zero).
You can use this Built-in to populate record groups that were created by a call to either:
· the CREATE_GROUP Built-in or
· the CREATE_GROUP_FROM_QUERY Built-in
When you use this Built-in, the indicated query becomes the default query for the group, and will be executed whenever the POPULATE_GROUP Built-in is subsequently called.
Note: Be aware that the POPULATE_GROUP_WITH_QUERY array fetches 20 records at a time. To improve network performance, you may want to restrict queries, thus limiting network traffic.
语法如下:
FUNCTION POPULATE_GROUP_WITH_QUERY
(recordgroup_id RecordGroup,
query VARCHAR2);
FUNCTION POPULATE_GROUP_WITH_QUERY
(recordgroup_name VARCHAR2,
query VARCHAR2);
Built-in Type unrestricted function
Returns NUMBER
Enter Query Mode yes
参数如下:
recordgroup_id
The unique ID that Oracle Forms assigns when it creates the group. The data type of the ID is RecordGroup.
recordgroup_name
The name you gave to the record group when creating it. The data type of the name is VARCHAR2.
query
A valid SELECT statement, enclosed in single quotes. Any columns retrieved as a result of the query take the data types of the columns in the table. If you restrict the query to a subset of the columns in the table, then Oracle Forms creates only those columns in the record group. The data type of the query is VARCHAR2.
例子:
/*
** Built-in: CREATE_GROUP
** Example: Creates a record group and populates its values
** from a query.
*/
DECLARE
rg_name VARCHAR2(40) := 'Salary_Range';
rg_id RecordGroup;
gc_id GroupColumn;
errcode NUMBER;
BEGIN
/*
** Make sure the record group does not already exist.
*/
rg_id := Find_Group(rg_name);
/*
** If it does not exist, create it and add the two
** necessary columns to it.
*/
IF Id_Null(rg_id) THEN
rg_id := Create_Group(rg_name);
/* Add two number columns to the record group */
gc_id := Add_Group_Column(rg_id, 'Base_Sal_Range',
NUMBER_COLUMN);
gc_id := Add_Group_Column(rg_id, 'Emps_In_Range',
NUMBER_COLUMN);
END IF;
/*
** Populate group with a query
*/
errcode := Populate_Group_With_Query( rg_id,
'SELECT SAL-MOD(SAL,1000),COUNT(EMPNO) '
||'FROM EMP '
||'GROUP BY SAL-MOD(SAL,1000) '
||'ORDER BY 1');
END;
其中:populate_group函数
是完成组的填充
它返回一个值表达成功或不成功 .若为0表示成功,若为error number 则为不成功
语法如下:
FUNCTION POPULATE_GROUP
(recordgroup_id RecordGroup);
FUNCTION POPULATE_GROUP
(recordgroup_name VARCHAR2);
Built-in Type unrestricted function
Returns NUMBER
Enter Query Mode yes
参数如下:
recordgroup_id
The unique ID that Oracle Forms assigns when it creates the group. The data type of the ID is RecordGroup.
recordgroup_name
The name you gave to the record group when creating it. The data type of the name is VARCHAR2.
限制:
Valid only for record groups:
· that were created at design time with a query
· that were created by a call to the CREATE_GROUP_FROM_QUERY built-in
· that have been previously populated with the POPULATE_GROUP_WITH_QUERY built-in (which associates a query with the record group)
见例子:
DECLARE
rg_name VARCHAR2(40) := 'Salary_Range';
rg_id RecordGroup;
errcode NUMBER;
BEGIN
/*
** Make sure group doesn't already exist
*/
rg_id := Find_Group( rg_name );
/*
** If it does not exist, create it and add the two
** necessary columns to it.
*/
IF Id_Null(rg_id) THEN
rg_id := Create_Group_From_Query( rg_name,
'SELECT SAL-MOD(SAL,1000) BASE_SAL_RANGE,'
||'COUNT(EMPNO) EMPS_IN_RANGE '
||'FROM EMP '
||'GROUP BY SAL-MOD(SAL,1000) '
||'ORDER BY 1');
END IF;
/*
** Populate the record group
*/
errcode := Populate_Group( rg_id );
END;
7、游标的使用
定义游标:
cursor 游标名 is select 语句;
cursor是定义游标的关键词,select是建立游标的数据表查询命令。
打开游标:
open 游标名;
提取游标数据:
fetch 游标名 into 变量名1, 变量名2,……;
或
fetch 游标名 into 记录型变量名;
游标的关闭。
close 游标名;
这个例子是新增和修改的一个存储过程,游标在这里没有起到实质性的作用,这里只是利用游标打印写数据用。
此过程可以在 user/password 为ka/ka下进行测试。
CREATE OR REPLACE PROCEDURE ADDRESS_PRO
(
V#ADDRESSID IN ADDRESS.ADDRESSID%TYPE,
V#CITYORCOUNTY IN ADDRESS.CITYORCOUNTY%TYPE,
V#CREATEDATE IN ADDRESS.CREATEDATE%TYPE,
V#CREATORID IN ADDRESS.CREATORID%TYPE,
V#DELETEDFLAG IN ADDRESS.DELETEDFLAG%TYPE,
V#MODIFIEDBY IN ADDRESS.MODIFIEDBY%TYPE,
V#MODIFIEDDATE IN ADDRESS.MODIFIEDDATE%TYPE,
V#POSTALCODE IN ADDRESS.POSTALCODE%TYPE,
V#PROVINCEID IN ADDRESS.PROVINCEID%TYPE,
V#STREETADDRESS IN ADDRESS.STREETADDRESS%TYPE,
V#TERRITORYID IN ADDRESS.TERRITORYID%TYPE
)
AS
TMPVAR NUMBER;
COUNVAR NUMBER;
CURSOR ADDRESS_CURSOR IS SELECT * FROM ADDRESS; (声明游标)
BEGIN
SELECT COUNT(*) INTO TMPVAR FROM ADDRESS WHERE ADDRESSID = V#ADDRESSID;
IF(TMPVAR > 0) THEN
BEGIN
DBMS_OUTPUT.PUT_LINE('-----update----');
END;
ELSE
BEGIN
DBMS_OUTPUT.PUT_LINE('------insert----');
END;
END IF;
SELECT COUNT(*) INTO COUNVAR FROM ADDRESS;
FOR ADDRESSRESULT IN ADDRESS_CURSOR LOOP
DBMS_OUTPUT.PUT_LINE('---'||ADDRESSRESULT.ADDRESSID||'----'||ADDRESSRESULT.CITYORCOUNTY);(打开和使用游标和关闭游标)
--DBMS_OUTPUT.PUT_LINE('---'||COUNVAR);
END LOOP;
IF(TMPVAR >= 0) THEN
BEGIN
UPDATE ADDRESS SET ADDRESSID = V#ADDRESSID,CITYORCOUNTY=V#CITYORCOUNTY,CREATEDATE=V#CREATEDATE,CREATORID=V#CREATORID,
DELETEDFLAG = V#DELETEDFLAG,MODIFIEDBY=V#MODIFIEDBY,MODIFIEDDATE=V#MODIFIEDDATE,POSTALCODE=V#POSTALCODE,
PROVINCEID=V#PROVINCEID,STREETADDRESS=V#STREETADDRESS,TERRITORYID=V#TERRITORYID WHERE ADDRESSID = V#ADDRESSID;
END;
ELSE
BEGIN
INSERT INTO ADDRESS(ADDRESSID,CITYORCOUNTY,CREATEDATE,CREATORID,DELETEDFLAG,MODIFIEDBY,MODIFIEDDATE,POSTALCODE,PROVINCEID,STREETADDRESS,TERRITORYID)
VALUES(V#ADDRESSID,V#CITYORCOUNTY,V#CREATEDATE,V#CREATORID,V#DELETEDFLAG,V#MODIFIEDBY,V#MODIFIEDDATE,V#POSTALCODE,V#PROVINCEID,V#STREETADDRESS,V#TERRITORYID);
END;
END IF;
END ADDRESS_PRO;
/
8、ALERT LOG文件
ALERT LOG文件也是用来记录INSTANCE的诊断信息的。它的存放目录也通过BACKGROUND_DUMP_DEST参数来指定。一般情况下ALERT LOG文件命名方式为:ALERT_ .LOG。ALTER LOG文件包括了一些数据库主要事件信息,例如:startup,dhutdown, redo log 的使用,tablespace的改变,文件的改变,内部错误信息,tablespace-backup的状态的改变等。ALTER LOG文件是重要的,同时该文件的大小增长的速度也很惊人,如果你不检查他,一段时间后你想看看它将是很费劲,因为它已经很大了,查起来也费劲。为了既能留下这些有用的信息,同时不至于浪费很大的空间,可以用改名的方法。你可以在任何 时候更改ALTER LOG文件名,甚至在DATABASE OPEN时。当ORACLE不能找到被BACKGROUND_DUMP_DESC 指定的文件时,他将增加一个新的ALTER LOG文件。虽然改名不要求SHUTDOW,但选择在 SHUTDOWN/STARTUP数据库时更改名字是一个好的主意。
9、外部连接和自联接
inner join(等值连接) 只返回两个表中联结字段相等的行left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录on 指定表间联结字段及其关系的等号 "=" 表达式,返回 true 或 false。当表达式返回 true 时,则查询中包含该记录。! 外部连接只能操作已存在于数据库中的数据。
使用 SELECT 语句来指定要显示的列。在 FROM 子句中,列出后跟关键字 LEFT OUTER JOIN、RIGHT OUTER JOIN 或 FULL OUTER JOIN 的第一个表的名称。接着需要指定后跟 ON 关键字的第二个表。在 ON 关键字后面,指定表示要连接的表之间关系的连接条件。
自连接:
通过表的别名来创建虚拟逻辑表,进行自连接查询。
SELECT SAMP_PROJECT.NAME,
SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
FROM SAMP_PROJECT INNER JOIN SAMP_STAFF
ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
内连接:
SELECT SAMP_PROJECT.NAME,
SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
FROM SAMP_PROJECT INNER JOIN SAMP_STAFF
ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
左连接:
SELECT SAMP_PROJECT.NAME, SAMP_PROJECT.PROJ,
SAMP_STAFF.NAME, SAMP_STAFF.JOB
FROM SAMP_PROJECT LEFT OUTER JOIN SAMP_STAFF
ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
右连接:
SELECT SAMP_PROJECT.NAME,
SAMP_PROJECT.PROJ, SAMP_STAFF.NAME, SAMP_STAFF.JOB
FROM SAMP_PROJECT RIGHT OUTER JOIN SAMP_STAFF
ON SAMP_STAFF.NAME = SAMP_PROJECT.NAME
对于外连接,Oracle中可以使用“(+)”来表示,9i可以使用LEFT/RIGHT/FULL OUTER JOIN,下面将配合实例一一介绍。
1. LEFT OUTER JOIN:左外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等价于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+);
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录。
2. RIGHT OUTER JOIN:右外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等价于
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+)=d.department_id;
结果为:所有员工及对应部门的记录,包括没有任何员工的部门记录。
3. FULL OUTER JOIN:全外关联
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
结果为:所有员工及对应部门的记录,包括没有对应部门编号department_id的员工记录和没有任何员工的部门记录。
10、DBA视图
DBA_CONS_COLUMNS,这个视图中可以查询所有的约束关系。
DBA_VIEWS:数据库中所有视图的文本.
DBA_TAB_PARTITIONS:对表的分区,描述它的分区级分区信息,分区的存储参数和由ANALYZE决定的各种分区统计数据.
DBA_HISTOGRAMS:是DBA_TAB_HISTOGRAMS的同义词.(DBA_TAB_HISTOGRAMS:所有表中列的直方图)
DBA_TABLES:数据库中所有关系表的描述,通常对表进行分析后,可以在这个视图中查询到统计信息。
11、触发器
语法 :
create [or replace] trigger 触发器名 触发时间 触发事件
on 表名
[for each row]
pl/sql 语句
触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before---表示在数据库动作之前触发器执行;
after---表示在数据库动作之后出发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
事例如下:(在ehdev 下可以测试运行)
CREATE OR REPLACE TRIGGER EHLD_LM_INVENTORY_INSERT_TRG
AFTER INSERT
ON EHLD_LM_INVENTORY
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
V#COUNT NUMBER;
V#BDM_WHS_CODE EHLD_BDM_WAREHOUSE.BDM_WHS_CODE%TYPE;
V#BDM_WHS_NAME EHLD_BDM_WAREHOUSE.BDM_WHS_NAME%TYPE;
V#BDM_COMP_CODE EHLD_BDM_COMPANY.BDM_COMP_CODE%TYPE;
V#BDM_COMP_CNAME EHLD_BDM_COMPANY.B
展开阅读全文