Процедуры PL / SQL и выполнение Toad?

Недавно я начал работать над рядом больших хранимых процедур Oracle PL / SQL с Toad for Oracle. Количество этих процедур обновляет и вставляет материал в таблицы. У меня вопрос: есть ли способ «безопасного» выполнения процедур PL / SQL без постоянного изменения каких-либо таблиц? Кроме того, как мне безопасно изменять и выполнять хранимые процедуры для экспериментов, фактически не внося изменений в базу данных?


person oneCoderToRuleThemAll    schedule 18.09.2018    source источник
comment
PL/SQL procedures предназначены для выполнения некоторых действий. Они могут включать заполнение и модификацию таблиц. И если вы не хотите видеть эти изменения в таблице, тогда какой смысл запускать процедуру.   -  person XING    schedule 18.09.2018
comment
@XING Конечно, я это понимаю. Но некоторые из этих процедур имеют длину более 3000 строк - как новичок, мне неудобно просто запускать их, не понимая, останутся ли какие-либо таблицы в несогласованном состоянии ...   -  person oneCoderToRuleThemAll    schedule 19.09.2018


Ответы (3)


Неважно, есть ли у вас Toad или SQ * Plus или что-то еще - все дело в коде.

Во-первых, есть ли в вашей программе какие-либо коммиты или откаты в хранимых процедурах?

Во-вторых, ваша программа выполняет какую-либо DDL-работу: создает таблицу? Это сделает неявный COMMIT. Имейте в виду, что если ваша программа вызывает другую программу, и у этой программы есть COMMIT или DDL - вы ЗАВЕРШАЕТЕСЬ как ее «все за один сеанс».

В-третьих, когда вы выполняете свою хранимую процедуру, есть ли у вашего анонимного блока COMMIT или ROLLBACK?

Ваш инструмент вступает в игру для третьего бита. Изучите код за кнопкой «выполнить».

В SQL Developer (аналогично Toad в этом отношении) ...

В этом случае у моего SP есть фиксация в коде - поэтому запрет исключения перед этой строкой ... это постоянное изменение.

В сгенерированном анонимном блоке есть ROLLBACK, но он закомментирован. Когда вы нажмете кнопку «Выполнить» в своем графическом интерфейсе, посмотрите на код там. При необходимости измените его.

введите описание изображения здесь

person thatjeffsmith    schedule 18.09.2018

Вы можете создать копию своей базы данных, а затем играть там. Другое дело, что вы можете создать копию задействованных процедур / функций, пакетов и таблиц и поиграть с ней.

Давайте эту процедуру,

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;
/

Это позволит вам сравнить ваши фактические данные с вашими тестовыми данными.

person eifla001    schedule 18.09.2018
comment
Когда вы сказали создать копию, я подумал, что вы предлагаете нового пользователя в среде разработки. Предлагаемая вами копия несколько сомнительна; что, если вы забудете изменить одно из этих имен таблиц? - person Littlefoot; 18.09.2018
comment
Хорошо, спасибо. Если OP следует моему ответу, он / она должен проверить, все ли таблицы в процедуре уже были изменены, прежде чем выполнять эти скопированные процедуры или функции. - person eifla001; 18.09.2018
comment
Конечно, но что, если останется. Лично я бы предпочел среду разработки, но мы только обсуждаем. - person Littlefoot; 18.09.2018
comment
Я согласен с этим. Вот почему в первом предложении своего ответа я сказал: «Вы можете создать копию своей базы данных, а затем играть там». - person eifla001; 18.09.2018

Вы можете поместить откат в конце процедуры и прокомментировать любые операторы Commits / DDL. Также вам нужно быть осторожным с утверждениями Pragma, если они есть.

person kapil    schedule 26.09.2018