Получение количества записей из оператора обновления - PullRequest
0 голосов
/ 18 июня 2019

У меня есть тестовый скрипт, работающий в Microfocus Loadrunner.Скрипт отправляет запрос на обновление 100 записей.Однако из-за дубликатов, отсутствующих данных и т. Д. Мы регулярно обнаруживаем, что <100 записей обновляются.Это предполагаемое поведение. </p>

Когда я запускаю запрос в SQL Developer или аналогичном, я получаю «97 поврежденных строк».Затем я могу войти в этот номер, чтобы узнать, сколько записей я обновил.Но команда в Loadrunner, которая выполняет запрос (lr_db_executeSQLStatement), не возвращает это значение, а просто возвращает «no dataset».Он может возвращать только информацию из оператора выбора.

Существует ли способ «обернуть» оператор обновления в оператор выбора, который бы возвращал количество затронутых записей?В коде псевдо, что-то вроде этого;

select affectedrows from dual where query = (update table set x=y where z)

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Вы можете использовать функцию для нее следующим образом:

CREATE OR REPLACE FUNCTION UPDATE_MY_TABLE(Y IN <DATATYPE>, Z IN <DATATYPE>)
RETURN NUMBER IS
BEGIN
EXECUTE IMMEDIATE 'UPDATE <TABLE> SET X = ' || Y || ' WHERE <SOME_COL> = ' || Z;
RETURN SQL%ROWCOUNT;
END;
/

-- then call the function to update the desired value
-- using desired where condition
-- Function will return the number of rows affected

num_rows_affected := UPDATE_MY_TABLE(<update value>,<update condition value>);

Я создал небольшое демо того же самого.

ДБ Fiddle Demo

Надеюсь, это решит вашу проблему.

Ура !!

0 голосов
/ 18 июня 2019

После каждого оператора DML вы можете получить доступ к переменной курсора SQL%ROWCOUNT, например

DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT ||' rows affected' );

Примечание. Значение атрибута SQL%ROWCOUNT относится к последней выполненной инструкции SQL из PL / SQL. Вы должны запустить такой оператор сразу после вашего DML.

...