创建SQL测试用例

为了创建一个SQL测试用例,必须输出该SQL语句以及关于该语句的一些有用信息。

-- 以sysdba 登陆,创建一个目录存放测试用例
create or replace directory test_dir1 as '';
grant read,write on test_dir1 to sh;
grant dba to sh;
conn sh/sh
-- 报错的SQL
selct * from my_mv where ....;
-- 使用 export_sql_testcase 存储过程来输出数据
set serveroutput on
declare mycase clob;
    begin
    dbms_sqldiag.export_sql_testcase(
        directory =>'test_dir1',
        sql_text =>'selct * from my_mv where ....',
        user_name =>'SH',
        exportData => TRUE,
        testcasse =>mycase
        );
end;
/

 

导入步骤

-- 以sysdba 登陆,创建一个目录存放测试用例
create or replace directory test_dir2 as '';
grant read,write on test_dir2 to test;
grant dba to test;
conn test/test
    
-- 使用 import_sql_testcase 存储过程来输出数据
set serveroutput on
begin
    dbms_sqldiag.import_sql_testcase(
        directory =>'test_dir2',
        filename =>'oratcb1_sssss.xml',
        importData => TRUE
        );
end;
/

 

用户 TEST 现在已经拥有了执行想要分析的SQL语句的所有对象。可以通过提交原始的 select 语句来验证这一点。它会给出与在SH下执行该语句相同的输出。

 

Oracle 将SQL测试用例创建为一个脚本,包含重建必要的数据库对象的语句,以及相关的运行时信息,如统计信息,从而重现错误。测试用例创建过程中捕获和导出的各种不同类型的信息:

  • 存在问题的语句的SQL文本
  • 表数据--可选的,可以导出部分采样数据或完成的数据
  • 执行计划
  • 优化器统计信息
  • PL/SQL函数、过程和包
  • 绑定变量
  • 用户权限
  • SQL配置文件
  • 语句中所有对象的元对象
  • 动态采样结果
  • 运行时信息,例如并行度

export_sql_testcase 过程各属性的含义

DIRECTORY: 想要用来存放测试用例文件的目录

SQL_TEXT:实际报错的SQL

TESTCASE:测试用例的名称

EXPORTDATA:默认不导出数据,TRUE为导出。还可以通过采样百分比指定一个值来限制导出数据的量。默认为 100

 

测试用例生成器将会自动导出PL/SQL包规范,而不会自动导出包体。但是可以指定让TCB将包体一起导出。导出过程会在所指定的目录下创建一些列的文件。在这些文件中,oratcb1_xxxmain.xml 包含测试用例的元数据

 

posted @ 2022-07-25 20:39  喝水鱼  阅读(266)  评论(0)    收藏  举报