Я бы предположил, что примеры в форме похожи на 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;
), и является универсальной совместимостью, поскольку его не нужно перехватывать и модифицировать на стороне клиента.
Ваш код не похож на то, что вы описываете. Приведенный ниже код должен отображать «Тест» MsgBox
при открытии рабочих книг, соответствующих правилу запуска с «Текущий утвержденный»
'This Macro will run whenever an Excel Workbooks is opened
Private Sub MonitorApp_WorkbookOpen(ByVal Wb As Workbook)
Dim cText As String
cText = "Current Approved"
If UCase(Left(Wb.Name, Len(cText))) = UCase(cText) Then
' Wb2.Activate
MsgBox "Test"
End If
End Sub