测试名称:事务原子性测试
测试目的:测试数据库中事务的原子性操作,一个事务要么全部提交成功,要么全部失败回滚,不能只执行其中的一部分操作
预置条件:
测试步骤:1、建表
create table EMP
(
EMPNO NUMBER(4) PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPNO NUMBER(4)
);
CREATE TABLE Dept(
DEPTNO NUMBER(4),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);
测试事务提交成功
SET AUTOCOMMIT OFF
INSERT INTO Dept VALUES (20,'RESEARCH','DALLAS');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,null,20);
commit;
查询数据是否已插入:
select * from dept;
select * from emp;
3、测试事务执行失败
SET AUTOCOMMIT OFF
delete from emp where empno=7369;
delete from dept where deptno=20;
直接断开会话
--再次登录查询—未删除
select * from dept;
select * from emp;
预期结果:事务不提交、通过重启数据库/kill事务涉及的会话,不存在部分成功,部分失败的情况,满足事务原子性
测试结果:满足事务原子性
测试名称:事务一致性测试
测试目的:测试数据库中事务的一致性操作,事务前后数据的完整性必须保持一致
预置条件:数据库运行正常
测试步骤:
--建表
--drop table test1;
--drop table test2;
create table test1(id int,mon int);
create table test2(id int,mon int);
insert into test1 values(1,500);
insert into test2 values(1,500);
commit;
--查看数据
select * from test1;
select * from test2;
--转账示例
update test1 set mon=mon-100 where id=1;
update test2 set mon=mon+100 where id=1;
commit;
--查看数据是否一致
select * from test1;
select * from test2;
预期结果:创建两个表,模拟转账场景,事务完成后,验证2个表数据增减相当,满足事务一致性
测试结果:支持事务一致性
测试名称:事务隔离性测试
测试目的:测试数据库中事务的隔离性操作,多个事务并发执行时,彼此之间不应该存在相互影响。
预置条件:数据库运行正常
测试步骤:
--建表
--drop table test;
create table test(id int ,name varchar(10));
insert into test values(1,'a');
--会话2
select * from test;–结果为空
--会话1
commit;
--会话2
select * from test;–有一条数据
预期结果:创建两个会话,A会话执行事务,对数据修改后不提交事务,A会话事务不提交前,B会话对A事务涉及的数据修改不可见,支持事务隔离性
测试结果:支持事务隔离性
Ⅰ、注意此处不要使用ctrl+z强制退出会话,会话没有正常关闭,事务也没有回滚,锁就残留下来了 同时重新打开disql时也不会显示刚刚添加的数据
测试名称:事务持久性测试
测试目的:测试数据库中事务的持久性操作,事务正常执行完毕后,对数据库的修改是永久性的。即事务的修改操作已经记录到了存储介质中。
预置条件:
--emp,dept表已存在
create table EMP
(
EMPNO NUMBER(4) PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPNO NUMBER(4)
);
CREATE TABLE Dept(
DEPTNO NUMBER(4),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);
select table_name from user_tables where table_name = 'EMP' or table_name = 'DEPT';
测试步骤:1、事务提交成功
SET AUTOCOMMIT OFF
INSERT INTO Dept VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
commit;
2、直接关闭会话
3、重新打开会话,查询数据是否已存在:
select * from dept;
select * from emp;
预期结果:事务提交后,重启数据库实例/kill事务涉及的会话,数据不丢失,满足事务持久性
测试结果:支持事务持久性
测试名称:数据库支持创建、修改、删除和查看存储过程,支持存储过程的调用
测试目的:测试数据库支持创建,修改,删除共和查看存储过程,支持存储过程的调用
预置条件:数据库运行正常
测试步骤:存储过程的创建
CREATE PROCEDURE SYSDBA.TEST02()
IS
aa varchar(10);
begin
aa:='hello word';
print(aa);
end;
存储过程的修改
CREATE OR REPLACE PROCEDURE "SYSDBA"."test"
AUTHID DEFINER
as
BEGIN
dbms_lock.sleep(4);
END;
存储过程的查看
select TXT from SYSTEXTS where ID = (select OBJECT_ID from dba_objects where OBJECT_NAME = 'TEST02' and OBJECT_TYPE = 'PROCEDURE');
存储过程的调用
call TEST02;
存储过程的删除
drop procedure test02;
测试结果:数据库支持创建、修改、删除和查看存储过程,支持存储过程的调用
测试名称:数据库支持创建、修改、删除和查看存储过程,支持存储过程的调用
测试目的:测试数据库支持创建,修改,删除共和查看存储过程,支持存储过程的调用
预置条件:
测试步骤:创建:
CREATE OR REPLACE FUNCTION F_FUT_CCHS_BDCS FOR CALCULATE
RETURN INT
IS
BEGIN
RETURN 1;
END;
修改:
CREATE OR REPLACE FUNCTION F_FUT_CCHS_BDCS FOR CALCULATE
RETURN INT
IS
BEGIN
RETURN 2;
END;
查看
select TXT from SYSTEXTS where ID = (select OBJECT_ID from dba_objects where OBJECT_NAME = 'F_FUT_CCHS_BDCS' and OBJECT_TYPE = 'FUNCTION');
批注(派大星 2026-08-12):???
调用
select F_FUT_CCHS_BDCS ();
删除
drop function F_FUT_CCHS_BDCS;
预期结果:测试成功
测试结果:数据库支持创建、修改、删除和查看存储过程,支持存储过程的调用
测试名称:数据库创建包
测试目的:测试数据库创建包
预置条件:数据库运行正常
测试步骤:
--创建表,执行如下SQL命令
CREATE TABLE TAB_FUT_BAGL_CJ(ID INT IDENTITY, NAME VARCHAR(100), CITY VARCHAR(100));
INSERT INTO TAB_FUT_BAGL_CJ(NAME, CITY) VALUES('TOM','武汉');
--创建包规范,执行如下SQL命令
CREATE OR REPLACE PACKAGE PKG_FUT_BAGL_CJ IS
E_NOPERSON EXCEPTION;
PERSONCOUNT INT;
PCUR CURSOR;
PROCEDURE ADDPERSON(PNAME VARCHAR(100), PCITY VARCHAR(100));
PROCEDURE REMOVEPERSON(PNAME VARCHAR(100), PCITY VARCHAR(100));
PROCEDURE REMOVEPERSON(PID INT);
FUNCTION GETPERSONCOUNT RETURN INT;
PROCEDURE PERSONLIST;
END PKG_FUT_BAGL_CJ;
--创建包体,执行如下SQL命令
CREATE OR REPLACE PACKAGE BODY PKG_FUT_BAGL_CJ AS
PROCEDURE ADDPERSON(PNAME VARCHAR(100), PCITY VARCHAR(100)) AS
BEGIN
INSERT INTO TAB_FUT_BAGL_CJ(NAME, CITY) VALUES(PNAME, PCITY);
PERSONCOUNT = PERSONCOUNT + SQL%ROWCOUNT;
END ADDPERSON;
PROCEDURE REMOVEPERSON(PNAME VARCHAR(100), PCITY VARCHAR(100)) AS
BEGIN
DELETE FROM TAB_FUT_BAGL_CJ WHERE NAME LIKE PNAME AND CITY LIKE PCITY;
PERSONCOUNT = PERSONCOUNT - SQL%ROWCOUNT;
END REMOVEPERSON;
PROCEDURE REMOVEPERSON(PID INT) AS
BEGIN
DELETE FROM TAB_FUT_BAGL_CJ WHERE ID = PID;
PERSONCOUNT = PERSONCOUNT - SQL%ROWCOUNT;
END REMOVEPERSON;
FUNCTION GETPERSONCOUNT RETURN INT AS
BEGIN
RETURN PERSONCOUNT;
END GETPERSONCOUNT;
PROCEDURE PERSONLIST AS
DECLARE
V_ID INT;
V_NAME VARCHAR(100);
V_CITY VARCHAR(100);
BEGIN
IF PERSONCOUNT = 0 THEN
RAISE E_NOPERSON;
END IF;
OPEN PCUR FOR SELECT ID, NAME, CITY FROM TAB_FUT_BAGL_CJ;
LOOP
FETCH PCUR INTO V_ID,V_NAME,V_CITY;
EXIT WHEN PCUR%NOTFOUND;
PRINT ('NO.' + (CAST (V_ID AS VARCHAR(100))) + ' ' + V_NAME + '????' + V_CITY );
END LOOP;
CLOSE PCUR;
END PERSONLIST;
BEGIN
SELECT COUNT(*) INTO PERSONCOUNT FROM TAB_FUT_BAGL_CJ;
END PKG_FUT_BAGL_CJ;
测试结果:数据库支持创建包
测试名称:数据库支持创建、删除、修改、查看视图
测试目的:数据库支持创建、删除、修改、查看视图
预置条件:数据库正常运行
测试步骤:测试创建视图
1、–创建表操作,执行如下SQL命令
create table TEST_STGL_CJ(id int, name varchar(10), sex varchar(10), bithdate date, house_place varchar, classid varchar(10));
2、–插入数据,执行如下SQL命令
insert into TEST_STGL_CJ values(10004, 'xuchang','female', '1993-7-13','hubeiwuhan','3-2');
3、–创建视图,执行如下SQL命令
create or replace view TEST_STGL_CJ_V as select id, name, house_place from TEST_STGL_CJ where sex='female';
4、查看视图
select * from TEST_STGL_CJ_V
修改视图
1、–修改表操作,执行如下SQL命令
alter table TEST_STGL_CJ add column (education varchar);
2、–检查当前系统表中视图列定义是否有效,执行如下SQL命令
select SF_VIEW_EXPIRED('SYSDBA','TEST_STGL_CJ_V');
3、–编译视图,执行如下SQL命令
alter view TEST_STGL_CJ_V compile;
删除视图
drop view TEST_STGL_CJ_V;
测试结果:数据库支持创建、删除、修改、查看视图
测试名称:Btree索引测试
测试目的:Btree单列索引创建与使用操作
预置条件:一.测试方式:
1.创建测试表
2.插入数据
3.创建数据表中单列btree索引
测试步骤:创建单列B树单列索引
--drop table test;
create table test as select * from dba_objects;–创建测试表
create index idx_test_object_id on test(object_id);–创建索引
select * from test where "TEST"."OBJECT_ID"='1';
查看执行计划确认索引是否生效
Explain select * from test where "TEST"."OBJECT_ID"='1';
drop index idx_test_object_id;
测试结果:1.可成功创建索引
2.执行相关sql,验证此索引可正确被优化器识别使用。
测试名称:Function index创建与删除
测试目的:Function index创建与删除
预置条件:1.创建测试表
2.插入数据
3.创建数据表中单列函数索引
测试步骤:1. 创建函数索引:
--drop table test;
create table test(
id number,
t_point datetime,
name VARCHAR(128),
par_2 number,
par_3 number,
par_4 number,
par_5 number,
par_6 number,
par_7 number,
par_8 number,
par_9 number,
par_10 number);
create index t_idx04 on test(upper(name)); --创建函数索引
insert into test select level,sysdate,'aa_' || level,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM
from dual connect by level <=150;–插入测试数据
Commit; --提交事务
select count(*) from test;
dbms_stats.gather_table_stats(ownname=>‘SYSDBA’,tabname=>‘TEST’,CASCADE=>true);–收集统计信息
select a.index_name,a.index_type,b.column_name from dba_indexes a,dba_ind_columns b where a.index_name=b.index_name and a.table_name='TEST';
explain select name from test where upper(name)=‘AA_150’; --查看索引是否生效
drop index t_idx04;
explain select name from test where upper(name)=‘AA_150’; --不走索引
测试结果:1.可成功创建索引
2.执行相关sql,验证此索引可正确被优化器识别使用。
测试名称:唯一多列索引的创建与使用
测试目的:唯一多列索引的创建与使用
预置条件:1.创建测试表
2.插入数据
3.创建数据表中多列复合唯一索引
测试步骤:1. 创建函数索引:
--drop table test;
create table test(
id number,
t_point datetime,
name VARCHAR(128),
par_2 number,
par_3 number,
par_4 number,
par_5 number,
par_6 number,
par_7 number,
par_8 number,
par_9 number,
par_10 number); --创建测试表
create unique index t_idx07 on test(id,name,par_2,par_3,par_4);–创建多列唯一索引
insert into test select level,sysdate,'aa_' || level,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM,
DBMS_RANDOM.RANDOM
from dual connect by level <=15000;–插入测试数据
Commit; --提交事务
dbms_stats.gather_table_stats(ownname=>‘SYSDBA’,tabname=>‘TEST’,CASCADE=>true);–收集统计信息
select a.index_name,a.index_type,b.column_name from dba_indexes a,dba_ind_columns b where a.index_name=b.index_name and a.table_name='TEST';
explain select name from test where id=150; --查看唯一索引是否生效
drop index t_idx07;
explain select name from test where id=150; --查看唯一索引已失效
测试结果:1.可成功创建索引
2.执行相关sql,验证此索引可正确被优化器识别使用。
测试名称:数据库支持基础函数,包括字符处理函数、日期处理函数、数值处理函
数、条件判断函数
测试目的:数据库支持基础函数,包括字符处理函数、日期处理函数、数值处理函
数、条件判断函数
预置条件:数据库运行正常
测试步骤:
--创建测试用例
1、数值函数ROUND
SELECT ROUND(15.20);
2、字符串函数ASCII
SELECT ASCII(‘B’) ,ASCII(‘中’);
3、日期处理函数
Select sysdate();
Select to_date(‘20220202’)from dual;
4、条件判断函数
SELECT DECODE(1, 1, 'A', 2, 'B');
预期结果:数据库支持基础函数,包括字符处理函数、日期处理函数、数值处理函
数、条件判断函数
测试结果:数据库支持基础函数,包括字符处理函数、日期处理函数、数值处理函
数、条件判断函数
测试名称:数据库支持高级函数,包括大对象对应的函数
测试目的:测试大对象函数EMPTY_BLOB初始化blob字段
预置条件:数据库运行正常
测试步骤:
--创建测试用例
1、创建表
CREATE TABLE test_eb (C1 BLOB, C2 INT);
INSERT INTO test_eb VALUES(EMPTY_BLOB(),1);
INSERT INTO test_eb VALUES(NULL,2);
INSERT INTO test_eb VALUES(0X123,3);
commit;
2、查询数据
SELECT LENGTHB(C1) FROM test_eb;
预期结果:数据库支持高级函数,包括大对象对应的函数
测试结果:数据库支持高级函数,包括大对象对应的函数
备注:清除测试用例
Drop table test_eb ;
测试名称:数据库支持高级函数,包括 XML 类型与 JSON 类型函数
测试目的:数据库支持高级函数,包括 XML 类型与 JSON 类型函数
测试步骤:
--创建测试用例
1、测试创建包含JSON数据类型的表
CREATE TABLE TEST_JSON
(id int NOT NULL,
date_loaded TIMESTAMP (6) WITH TIME ZONE,
po_document VARCHAR
CONSTRAINT ensure_json CHECK (po_document IS JSON));
2、插入JSON数据,执行如下SQL命令
INSERT INTO TEST_JSON VALUES (1,SYSTIMESTAMP,'{
"PONumber" : 1600,
"Reference" : "ABULL-20140421",
"Requestor" : "Alexis Bull",
"User" : "ABULL",
"CostCenter" : "A50",
"Special Instructions" : null,
"AllowPartialShipment" : true
}
');
Commit;
3、查询json数据,执行如下SQL命令
SELECT json_query(po_document,'$.*' RETURNING VARCHAR WITH WRAPPER ERROR ON ERROR) from TEST_JSON;
4、创建包含XML数据类型的表
create table TEST_XML
(
psn_code NUMBER(18) not null,
psn_verson VARCHAR2(17),
psn_xml xmltype,
update_time DATE,
update_psn_code NUMBER(18)
);
5、插入数据
--插入数据:
insert into TEST_XML (PSN_CODE,
PSN_VERSON,
PSN_XML,
UPDATE_TIME,
UPDATE_PSN_CODE)
values (333,
'王五',
'<?xml version="1.0" encoding="UTF-8"?><data><basic_info><psn_code>100018476</psn_code><zh_name>添加11</zh_name><en_name/><gender_value/><other_name/><card_type_value></card_type_value><card_type_name></card_type_name><card_code/><ethnicity_value/><ethnicity_name/><birthday/><org_name/><org_code/><department/><position/><prof_title_value/><prof_title_name/><educate_value/><educate_name/><degree_value/><degree_name/><degree_country_value/><degree_country_name/><degree_year/><graduate_college/><degree_college/><doctoral_value/><doctoral_name/><academician_value/><academician_name/><receive_title_value/><receive_title_name/><post_code/><http/><address/><bank_name/><bank_orgname/><bank_account/><work_experience/><working_performance/><allowance/><honorary_title/><social_appointments/><other/></basic_info><content><file_code8/></content><valid><valid_card/></valid><contact><major/><major_work/><email>abcncc1@123.com</email><tel_work/><tel_home/><mobile>123456xxxxx</mobile><fax/></contact><researches><research seq_no="1"><zh_keywords><keyword seq_no="1">1</keyword><keyword seq_no="2"/><keyword seq_no="3"/><keyword seq_no="4"/><keyword seq_no="5"/></zh_keywords><subject_code>120</subject_code><en_keywords><keyword seq_no="1"/><keyword seq_no="2"/><keyword seq_no="3"/><keyword seq_no="4"/><keyword seq_no="5"/></en_keywords><subject_name>信息科学与系统科学</subject_name><research_area_code/><research_area_name/></research><research seq_no="2"><zh_keywords><keyword seq_no="1">1</keyword><keyword seq_no="2"/><keyword seq_no="3"/><keyword seq_no="4"/><keyword seq_no="5"/></zh_keywords><subject_code>130</subject_code><en_keywords><keyword seq_no="1"/><keyword seq_no="2"/><keyword seq_no="3"/><keyword seq_no="4"/><keyword seq_no="5"/></en_keywords><subject_name>力学</subject_name><research_area_code/><research_area_name/></research><research seq_no="3"><subject_code/><subject_name/><research_area_code/><research_area_name/></research><research seq_no="4"><subject_code/><subject_name/><research_area_code/><research_area_name/></research><research seq_no="5"><subject_code/><subject_name/><research_area_code/><research_area_name/></research></researches><disciplines><discipline seq_no="1"><zh_keywords><keyword seq_no="1">1</keyword><keyword seq_no="2"/><keyword seq_no="3"/><keyword seq_no="4"/><keyword seq_no="5"/></zh_keywords><discipline_code>B</discipline_code><en_keywords><keyword seq_no="1"/><keyword seq_no="2"/><keyword seq_no="3"/><keyword seq_no="4"/><keyword seq_no="5"/></en_keywords><discipline_name>化学科学</discipline_name></discipline><discipline seq_no="2"><discipline_code/><discipline_name/></discipline><discipline seq_no="3"><discipline_code/><discipline_name/></discipline><discipline seq_no="4"><discipline_code/><discipline_name/></discipline><discipline seq_no="5"><discipline_code/><discipline_name/></discipline></disciplines></data>',
null,
444);
commit;
6、查询XML数据
select existsnode(cx.psn_xml,'/data/basic_info/zh_name') from TEST_XML cx where cx.psn_code=333;
预期结果:数据库支持高级函数,包括 XML 类型与 JSON 类型函数
测试结果:数据库支持高级函数,包括 XML 类型与 JSON 类型函数
备注:清除测试用例
Drop table test_JSON;
Drop table test_XML;
https://eco.dameng.com
文章
阅读量
获赞
