Как протестировать сконвертированный код SQL

В этой статье описываются опции тестирования Конвертум Мастер Классик, их использование и получаемые результаты.

Поддерживаются следующие базы данных: Sybase Adaptive Server Enterprise, Oracle и Microsoft SQL Server.

Опция TEST

Существует два способа указания опции TEST при запуске Конвертум Мастер Классик:

  1. /TEST - при запуске из командной строки;
  2. TEST=Yes - в секции [COMMON] файла sqlways.ini или sqlways_wzd.ini. Опция TEST используется для генерации операторов вызова процедур или функций, преобразованных либо из скриптов, либо из базы данных. Если эта опция установлена, преобразование не выполняется, генерируются только операторы вызова. Пожалуйста, обратитесь к следующему примеру:

Предположим, что у вас есть исходная процедура Sybase ASE. Если опция TEST не указана, преобразование в Oracle будет выглядеть следующим образом:

Table1

Sybase ASE Oracle
create procedure sp_proc
as
declare @x int
select @x= 2
GO
create or replace procedure sp_proc
as
v_x NUMBER(10,0);
BEGIN
v_x := 2;
END;

Когда опция TEST включена, вместо преобразованного синтаксиса генерируется следующий оператор вызова:

Table2

Sybase ASE Oracle
create procedure sp_proc
as
declare @x int
select @x= count (distinct col1)
from Tab1
return @x
GO
CALL sp_proc();


Опция MAX_NUMBER_OF_TEST_CALLS

Эта опция дополнительно указывается в разделе [COMMON] sqlways.ini или sqlways_wzd.ini.

Опция MAX_NUMBER_OF_TEST_CALLS используется для указания количества операторов вызова процедур или функций, преобразуемых как из скриптов, так и из базы данных. Пожалуйста, обратитесь к следующему примеру:

Table3

Sybase ASE Oracle
create procedure sp_params_select
@par1 int,
@par2 date,
@par3 varchar(20)
as
DECLARE @var1 int
DECLARE @var2 date
DECLARE @var3 varchar(20)
begin
set @var2 = (SELECT tb.col2
from tab_sp_params_select tb,
tab_sp_params_select1 tb1
where tb.col1 = @par1
and tb.col2=tb1.col2)
set @var3 = (SELECT tb.col3
from tab_sp_params_select tb,
tab_sp_params_select1 tb1
where tb.col2 = @par2
and tb.col2=tb1.col2)
set @var1 = (SELECT tb.col1
from tab_sp_params_select tb,
tab_sp_params_select1 tb1
where tb.col3 = @par3
and tb.col2=tb1.col2)
end
CALL sp_params_select(1,null,'1');
CALL sp_params_select(1,null,'1');
CALL sp_params_select(2,null,'1');
CALL sp_params_select(3,null,'1');
CALL sp_params_select(4,null,'1');
CALL sp_params_select(5,null,'1');
CALL sp_params_select(6,null,'1');
CALL sp_params_select(7,null,'1');
CALL sp_params_select(8,null,'1');
CALL sp_params_select(9,null,'1');
CALL sp_params_select(10,null,'1');
CALL sp_params_select(1,TO_DATE('2010-11-01','YYYY-MM-DD'),'1');
CALL sp_params_select(1,null,'1');
CALL sp_params_select(1,null,'2');
CALL sp_params_select(1,null,'3');
CALL sp_params_select(1,null,'4');
CALL sp_params_select(1,null,'5');
CALL sp_params_select(1,null,'6');
CALL sp_params_select(1,null,'7');
CALL sp_params_select(1,null,'8');
CALL sp_params_select(1,null,'9');
CALL sp_params_select(1,null,'10');

Обратите внимание, что внутри SP есть три оператора SELECT, которые возвращают наборы результатов на основе значений, заданных через параметры при вызове SP. Таким образом, если вместе с SP выбраны таблицы, на которые есть ссылки внутри SP, то генерируется набор операторов вызова, основанный на данных, извлеченных из исходной базы данных. Для данных, хранящихся в таблице tab_sp_params_select, используемой в приведенном выше примере, рассмотрим следующую таблицу:

Table4

tab_sp_params_select data
1,2010-11-01,1
2,2010-11-01,2
3,2010-11-01,3
4,2010-11-01,4
5,2010-11-01,5
6,2010-11-01,6
7,2010-11-01,7
8,2010-11-01,8
9,2010-11-01,9
10,2010-11-01,10
11,2010-11-01,11
12,2010-11-01,12
13,2010-11-01,13
14,2010-11-01,14
15,2010-11-01,15
16,2010-11-01,16
17,2010-11-01,17
18,2010-11-01,18
19,2010-11-01,19
20,2010-11-01,20

Как видите, в каждом операторе select используется только один параметр. Поэтому генерируется три секции операторов вызова, каждая из которых содержит до 10 операторов, так как параметр MAX_NUMBER_OF_TEST_CALLS в данном примере установлен на 10. Берутся только DISTINCT-значения. Поэтому для столбца col2 используется только одно значение даты и генерируется только один вызывающий оператор. Остальные значения добавляются по умолчанию.

Значения DEFAULT для опции TEST

Каждая база данных имеет свой собственный набор типов данных, который может быть указан по-разному в разных СУБД. Поэтому значения по умолчанию для опции TEST указаны в собственном разделе базы данных. Обратитесь к следующей таблице с названиями разделов и опций и их значениями:

Table5

[Oracle] [MSSQL] [Sybase]
TEST_FPDV_FLOAT=1
TEST_FPDV_NUMBER=1
TEST_FPDV_DATE=SYSDATE
TEST_FPDV_TIMESTAMP=SYSTIMESTAMP
TEST_FPDV_CHAR='1'
TEST_FPDV_VARCHAR2='1'
TEST_FPDV_NVARCHAR2='1'
TEST_FPDV_NCHAR='1'
TEST_FPDV_RAW='1'
TEST_FPDV_TINYINT=1
TEST_FPDV_SMALLINT=1
TEST_FPDV_INT=1
TEST_FPDV_BIGINT=1
TEST_FPDV_NUMERIC=1
TEST_FPDV_FLOAT=1
TEST_FPDV_REAL=1
TEST_FPDV_SMALLMONEY=1
TEST_FPDV_MONEY=1
TEST_FPDV_SMALLDATETIME=getdate()
TEST_FPDV_DATETIME=getdate()
TEST_FPDV_CHAR='1'
TEST_FPDV_VARCHAR='1'
TEST_FPDV_NVARCHAR='1'
TEST_FPDV_NCHAR='1'
TEST_FPDV_BINARY='1'
TEST_FPDV_VARBINARY='1'
TEST_FPDV_BIT=1
TEST_FPDV_TINYINT=1
TEST_FPDV_SMALLINT=1
TEST_FPDV_INT=1
TEST_FPDV_BIGINT=1
TEST_FPDV_NUMERIC=1
TEST_FPDV_FLOAT=1
TEST_FPDV_REAL=1
TEST_FPDV_SMALLMONEY=1
TEST_FPDV_MONEY=1
TEST_FPDV_SMALLDATETIME=getdate()
TEST_FPDV_DATETIME=getdate()
TEST_FPDV_CHAR='1'
TEST_FPDV_VARCHAR='1'
TEST_FPDV_NVARCHAR='1'
TEST_FPDV_NCHAR='1'
TEST_FPDV_BINARY='1'
TEST_FPDV_VARBINARY='1'
TEST_FPDV_BIT=1


Если вы столкнетесь с какими-либо трудностями или у вас возникнут другие вопросы, пожалуйста, свяжитесь с нашей службой поддержки по адресу support@convertum.ru.