Как обрабатывать синтаксические ошибки в sybase

Я новичок в Sybase. Я использую следующую версию Sybase: Adaptive Server Enterprise/15.0.3/EBF 24162 ESD#4.

Здесь я пытаюсь запустить несколько запросов за один раз. Я создал perl-скрипт, который каждую секунду будет собирать данные из sysMonSQLText. и он работает нормально. После завершения perl он генерирует файл test.sql. Ниже приведены примеры данных этого файла test.sql:

declare @start_time datetime
declare @end_time datetime
declare @row_count INT


select 'Start - Query Number: 65000'
select @start_time = getdate()
SELECT 1
select @row_count = @@rowcount
select @end_time = getdate()
if ( @@error <> 0)
BEGIN
select (" SQL was not executed successfully. Error Code:  " + (SELECT CONVERT(varchar(10),@@error)))
END
Else
Begin
select ("Query number 65000 - Time took to execute the Query: " + ( SELECT CONVERT(varchar(10000), (select datediff(ss, @start_time, @end_time)) ) ) + ", number of rows retrieved: " + ( SELECT CONVERT(varchar(10000),@row_count)) + ", on  " + ( SELECT CONVERT(varchar(10000),@@servername) ) )
END
select 'End - Query Number: 65000'

select 'Start - Query Number: 65001'
select @start_time = getdate()
select * from table_1
select @row_count = @@rowcount
select @end_time = getdate()
if ( @@error <> 0)
BEGIN
select (" SQL was not executed successfully. Error Code:  " + (SELECT CONVERT(varchar(10),@@error)))
END
Else
Begin
select ("Query number 65001 - Time took to execute the Query: " + ( SELECT CONVERT(varchar(10000), (select datediff(ss, @start_time, @end_time)) ) ) + ", number of rows retrieved: " + ( SELECT CONVERT(varchar(10000),@row_count)) + ", on  " + ( SELECT CONVERT(varchar(10000),@@servername) ) )
END
select 'End - Query Number: 65001'

select 'Start - Query Number: 65002'
select @start_time = getdate()
select * from table_2
select @row_count = @@rowcount
select @end_time = getdate()
if ( @@error <> 0)
BEGIN
select (" SQL was not executed successfully. Error Code:  " + (SELECT CONVERT(varchar(10),@@error)))
END
Else
Begin
select ("Query number 65002 - Time took to execute the Query: " + ( SELECT CONVERT(varchar(10000), (select datediff(ss, @start_time, @end_time)) ) ) + ", number of rows retrieved: " + ( SELECT CONVERT(varchar(10000),@row_count)) + ", on  " + ( SELECT CONVERT(varchar(10000),@@servername) ) )
END
select 'End - Query Number: 65002'

GO

Я запускаю команду isql для выполнения этого файла, ниже приведена команда:

isql -S Serevr_name -U user_name -P password_ -D FIRM_ -i C:\path\test.sql -o C:\path\test.log

если все запросы действительны, я имею в виду, что если с запросом нет синтаксической ошибки, то он работает нормально. но если есть какая-либо ошибка с любым запросом, то он просто показывает все ошибки в файле журнала.

но что я хочу здесь, если есть какая-либо ошибка, будь то синтаксическая или логическая, тогда это должно быть напечатано в журнале и пойдет на другой запрос.

Если вы видите файл test.sql, то вы понимаете, что я пытаюсь здесь сделать. Я рассчитываю количество строк и время, затраченное на любой запрос.

в файле test.sql около 1000 запросов. Пожалуйста, помогите мне разобраться с этим

Спасибо.


person HBK    schedule 19.09.2016    source источник


Ответы (1)


Просто начнем с первой очевидной проблемы: проверка @@error после присвоения переменной getdate() никогда не будет «истинной»: этот оператор просто не может привести к ошибке.

Возможно, вам придется переосмыслить, какие проблемы вы пытаетесь уловить.

person RobV    schedule 20.09.2016
comment
Спасибо, Роб, я изменил свой блок, удалил операторы row_count и end_time, но все еще сталкиваюсь с той же проблемой.. спасибо - person HBK; 20.09.2016