Как правильно вызвать DBMS_WM.GOTOWORKSPACE внутри процедуры

Если вы исключаете application/, то все под ним всегда будет исключено (даже если какой-то более поздний шаблон отрицательного исключения («unignore») может соответствовать чему-то в application/).

Чтобы сделать то, что вы хотите, чтобы вы «не записывали» каждый родительский каталог всего, что вы хотите «unignore». Обычно вы заканчиваете тем, что пишете правила для этой ситуации парами: игнорировать все в каталоге, но не какой-то определенный подкаталог.

# you can skip this first one if it is not already excluded by prior patterns
!application/

application/*
!application/language/

application/language/*
!application/language/gr/

Примечание. Конечная / * значительна:

  • Паттерн dir / исключает каталог с именем dir и (неявно) все под ним. Если dir /, Git никогда не будет смотреть на что-либо под dir и, таким образом, никогда не применит ни один из шаблонов «un-exclude» к чему-либо, находящемуся под каталогом.
  • В каталоге dir / * ничего не говорится о самом dir; он просто исключает все, что находится под управлением. С dir / * Git обработает прямое содержимое dir, предоставив другим шаблонам возможность «исключить» некоторый бит содержимого (! Dir / sub /).
1
задан Josh 13 July 2018 в 18:00
поделиться

1 ответ

Я бы предположил, что примеры в форме похожи на EXEC DBMS_WM.GOTOWORKSPACE (& lt;>); and not between a conditional IF ... END IF; `

EXEC не является PLSQL зарезервированное слово. Это макрос / ярлык на клиенте, а не сервер базы данных, который расширяется, чтобы обернуть оператор, предшествующий ему в блок BEGIN ... END;.

Он очень широко используется в командной строке (SQLPlus и SQLcl) и редакторы, такие как Toad и SQLDeveloper et al. часто поддерживают его, но он поддерживается только как монолитная команда (EXEC как прелюдия к блоку), а не внутри блока (Nested EXEC не поддерживается, а также EXEC внутри другого BEGIN...END; блок).

Поскольку это не зарезервированное слово, его расширение, когда оно находится в другом блоке, является проблемой. Разбор его становится неоднозначным - можно определить собственную функцию под названием EXEC, и было бы вполне корректно работать в блоке PLSQL. Затем редактору нужно было бы сделать неуверенный вызов о том, что делать, когда он сталкивается с этим словом. Приведенный ниже пример будет разорван, если EXEC будет расширен вместо того, чтобы быть распознанным как процедура в блоке PLSQL:

CREATE PROCEDURE EXEC(PARAM_1 IN VARCHAR2)
IS
  BEGIN
    DBMS_OUTPUT.PUT_LINE(UTL_LMS.FORMAT_MESSAGE('Param is:[%s]',PARAM_1));
  END EXEC;
/

BEGIN
  EXEC('VOLTRON');
END;
/

Итак, второй пример верен (предполагается, что он размещен в другом блоке BEGIN...END; ), и является универсальной совместимостью, поскольку его не нужно перехватывать и модифицировать на стороне клиента.

2
ответ дан alexgibbs 17 August 2018 в 12:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: