Процедуры PL / SQL и выполнение жаб? - PullRequest
0 голосов
/ 18 сентября 2018

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

Ответы [ 3 ]

0 голосов
/ 18 сентября 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;
/

Сделав это, вы сможете сравнить свои фактические данные с данными испытаний.

0 голосов
/ 26 сентября 2018

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

0 голосов
/ 18 сентября 2018

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

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

Второе - ваша программа выполняет какие-либо DDL-операции: создает таблицу? Это будет делать неявный COMMIT. Имейте в виду, если ваша программа вызывает другую программу, и эта программа имеет COMMIT или DDL - вы ОБЯЗАНЫ как все это за один сеанс.

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

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

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

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

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

enter image description here

...