1、一、数据库 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 系统
2、介绍 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、
3、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),
4、但可以有多个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
5、 sequence 修改任意序列的权限 alter any snapshot 修改任意快照的权限 alter any table 修改任意表的权限 alter any trigger 修改任意触发器的权限 alter cluster 修改拥有簇的权限 alter database 修改数据库的权限 alter procedure 修改拥有的存储过程权限 alter profile 修改资源限制简表的权限 alter resource cost 设置佳话资源开销的权限 alter rollback segment 修改回滚段
6、的权限 alter sequence 修改拥有的序列权限 alter session 修改数据库会话的权限 alter sytem 修改数据库服务器设置的权限 alter table 修改拥有的表权限 alter tablespace 修改表空间的权限 alter user 修改用户的权限 analyze 使用analyze命令分析数据库中任意的表、索引和簇 audit any 为任意的数据库对象设置审计选项 audit system 允许系统操作审计 backup any table 备份任意表的权限 b
7、ecome 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 为任意用户创建表的权
8、限 create any trigger 为任意用户创建触发器的权限 create any view 为任意用户创建视图的权限 create cluster 为用户创建簇的权限 create database link 为用户创建的权限 create procedure 为用户创建存储过程的权限 create profile 创建资源限制简表的权限 create public database link 创建公共数据库链路的权限 create public synonym 创建公共同义名的权限 create role 创建
9、角色的权限 create rollback segment 创建回滚段的权限 create session 创建会话的权限 create sequence 为用户创建序列的权限 create snapshot 为用户创建快照的权限 create synonym 为用户创建同义名的权限 create table 为用户创建表的权限 create tablespace 创建表空间的权限 create user 创建用户的权限 create view 为用户创建视图的权限 delete any table 删除任意表行的
10、权限 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 删除任意
11、快照的权限 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 删除回滚段的权限
12、 drop tablespace 删除表空间的权限 drop user 删除用户的权限 execute any procedure 执行任意存储过程的权限 execute function 执行存储函数的权限 execute package 执行存储包的权限 execute procedure 执行用户存储过程的权限 force any transaction 管理未提交的任意事务的输出权限 force transaction 管理未提交的用户事务的输出权限 grant any privilege 授予任意系统特权的权限
13、 grant any role 授予任意角色的权限 index table 给表加索引的权限 insert any table 向任意表中插入行的权限 insert snapshot 向快照中插入行的权限 insert table 向用户表中插入行的权限 insert view 向用户视图中插行的权限 lock any table 给任意表加锁的权限 manager tablespace 管理(备份可用性)表空间的权限 references table 参考表的权限 restricted session 创建有限制的数
14、据库会话的权限 select any sequence 使用任意序列的权限 select any table 使用任意表的权限 select snapshot 使用快照的权限 select sequence 使用用户序列的权限 select table 使用用户表的权限 select view 使用视图的权限 unlimited tablespace 对表空间大小不加限制的权限 update any table 修改任意表中行的权限 update snapshot 修改快照中行的权限 update table 修改
15、用户表中的行的权限 update view 修改视图中行的权限 4、Oracle开发者权限 应用程序开发者有一下两种权限: A free development 应用程序开发者允许创建新的模式对象,包括table,index,procedure,package等,它允许应用程序开发者开发独立于其他对象的应用程序。 B controlled development 应用程序开发者不允许创建新的模式对象。所有需要table,indes procedure等都由数据库管理者创建,它保证了数据库管理者能完全控制数据空间的使用以及访问数据库信息的途径。但
16、有时应用程序开发者也需这两种权限的混和。 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,] ---可否实例化的成员函数
17、 [{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 Form
18、s 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
19、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 n
20、etwork 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 fun
21、ction 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. q
22、uery 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 t
23、ype 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 r
24、ecord 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_Colum
25、n(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,
26、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
27、 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
28、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
29、 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 := Crea
30、te_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、游标的使用 定义游标:
31、 cursor 游标名 is select 语句; cursor是定义游标的关键词,select是建立游标的数据表查询命令。 打开游标: open 游标名; 提取游标数据: fetch 游标名 into 变量名1, 变量名2,……; 或 fetch 游标名 into 记录型变量名; 游标的关闭。 close 游标名; 这个例子是新增和修改的一个存储过程,游标在这里没有起到实质性的作用,这里只是利用游标打印写数据用。 此过程可以在 user/password 为ka/ka下进行测试。 CREA
32、TE 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,
33、 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
34、 * 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
35、 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 UPD
36、ATE 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=
37、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#M
38、ODIFIEDBY,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 的使
39、用,tablespace的改变,文件的改变,内部错误信息,tablespace-backup的状态的改变等。ALTER LOG文件是重要的,同时该文件的大小增长的速度也很惊人,如果你不检查他,一段时间后你想看看它将是很费劲,因为它已经很大了,查起来也费劲。为了既能留下这些有用的信息,同时不至于浪费很大的空间,可以用改名的方法。你可以在任何 时候更改ALTER LOG文件名,甚至在DATABASE OPEN时。当ORACLE不能找到被BACKGROUND_DUMP_DESC 指定的文件时,他将增加一个新的ALTER LOG文件。虽然改名不要求SHUTDOW,但选择在 SHUTDOWN/START
40、UP数据库时更改名字是一个好的主意。 9、外部连接和自联接 inner join(等值连接) 只返回两个表中联结字段相等的行left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录on 指定表间联结字段及其关系的等号 "=" 表达式,返回 true 或 false。当表达式返回 true 时,则查询中包含该记录。! 外部连接只能操作已存在于数据库中的数据。 使用 SELECT 语句来指定要显示的列。在 FROM 子句中,列出后跟关键字 LEFT OUTER JOIN、RIGH
41、T 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.NA
42、ME 内连接: 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_PR
43、OJECT 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可以使用LE
44、FT/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 em
45、ployees 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.depart
46、ment_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 employe
47、es 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决定的各种分区统计数据.
48、DBA_HISTOGRAMS:是DBA_TAB_HISTOGRAMS的同义词.(DBA_TAB_HISTOGRAMS:所有表中列的直方图) DBA_TABLES:数据库中所有关系表的描述,通常对表进行分析后,可以在这个视图中查询到统计信息。 11、触发器 语法 : create [or replace] trigger 触发器名 触发时间 触发事件 on 表名 [for each row] pl/sql 语句 触发器名:触发器对象的名称。由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。 触发时间:指明触发器何时执行,该值可
49、取: before---表示在数据库动作之前触发器执行; after---表示在数据库动作之后出发器执行。 触发事件:指明哪些数据库动作会触发此触发器: insert:数据库插入会触发此触发器; update:数据库修改会触发此触发器; delete:数据库删除会触发此触发器。 表 名:数据库触发器所在的表。 for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。 事例如下:(在ehdev 下可以测试运行) CREATE OR REPLACE TRIGGER EHLD_LM_INVENTORY_INSERT_TRG AFTER IN
50、SERT 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






