Недавно я начал работать над рядом больших хранимых процедур Oracle PL / SQL с Toad for Oracle. Количество этих процедур обновляет и вставляет материал в таблицы. У меня вопрос: есть ли способ «безопасного» выполнения процедур PL / SQL без постоянного изменения каких-либо таблиц? Кроме того, как мне безопасно изменять и выполнять хранимые процедуры для экспериментов, фактически не внося изменений в базу данных?
Процедуры PL / SQL и выполнение Toad?
Ответы (3)
Неважно, есть ли у вас Toad или SQ * Plus или что-то еще - все дело в коде.
Во-первых, есть ли в вашей программе какие-либо коммиты или откаты в хранимых процедурах?
Во-вторых, ваша программа выполняет какую-либо DDL-работу: создает таблицу? Это сделает неявный COMMIT. Имейте в виду, что если ваша программа вызывает другую программу, и у этой программы есть COMMIT или DDL - вы ЗАВЕРШАЕТЕСЬ как ее «все за один сеанс».
В-третьих, когда вы выполняете свою хранимую процедуру, есть ли у вашего анонимного блока COMMIT или ROLLBACK?
Ваш инструмент вступает в игру для третьего бита. Изучите код за кнопкой «выполнить».
В SQL Developer (аналогично Toad в этом отношении) ...
В этом случае у моего SP есть фиксация в коде - поэтому запрет исключения перед этой строкой ... это постоянное изменение.
В сгенерированном анонимном блоке есть ROLLBACK, но он закомментирован. Когда вы нажмете кнопку «Выполнить» в своем графическом интерфейсе, посмотрите на код там. При необходимости измените его.
Вы можете создать копию своей базы данных, а затем играть там. Другое дело, что вы можете создать копию задействованных процедур / функций, пакетов и таблиц и поиграть с ней.
Давайте эту процедуру,
CREATE PROCEDURE proc1
IS
BEGIN
INSERT INTO table1
(col1, col2)
VALUES
('actual data', 'hello');
UPDATE table2
SET col1 = 'actual'
WHERE col2 = 1;
COMMIT;
END;
Вы создадите внутри новую процедуру с той же логикой.
CREATE PROCEDURE proc1_test
IS
BEGIN
INSERT INTO table1_test
(col1, col2)
VALUES ('test', 'hello');
UPDATE table2_test
SET col1 = 'test2'
WHERE col2 = 1;
COMMIT;
END;
/
Это позволит вам сравнить ваши фактические данные с вашими тестовыми данными.
Вы можете поместить откат в конце процедуры и прокомментировать любые операторы Commits / DDL. Также вам нужно быть осторожным с утверждениями Pragma, если они есть.
PL/SQL procedures
предназначены для выполнения некоторых действий. Они могут включать заполнение и модификацию таблиц. И если вы не хотите видеть эти изменения в таблице, тогда какой смысл запускать процедуру. - person XING   schedule 18.09.2018