diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c3ed10e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.cache diff --git a/Commands/Describe Selection or Word.tmCommand b/Commands/Describe Selection or Word.tmCommand new file mode 100644 index 0000000..e71dd54 --- /dev/null +++ b/Commands/Describe Selection or Word.tmCommand @@ -0,0 +1,46 @@ + + + + + beforeRunningCommand + nop + command + query=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} + +. "$TM_SUPPORT_PATH/lib/webpreview.sh" +html_header "Describe $query" + +NLS_LANG=AMERICAN_AMERICA.UTF8 +export NLS_LANG + +sqlplus -S -L /NOLOG <<EOF +set define off +whenever sqlerror exit failure rollback +prompt <pre> +connect "$ORA_USER"/"$ORA_PWD"@"$ORA_CONNECT" +show user +prompt </pre> +set markup html on +desc $query +set markup html off +EOF + +echo "SQL*Plus exited." +html_footer + + fallbackInput + word + input + selection + keyEquivalent + @d + name + Describe Selection or Word + output + showAsHTML + scope + source.plsql.oracle + uuid + 65257C54-A07C-4764-961C-B892F28A89DF + + diff --git a/Commands/Find Procedure.tmCommand b/Commands/Find Procedure.tmCommand new file mode 100644 index 0000000..6c3b7de --- /dev/null +++ b/Commands/Find Procedure.tmCommand @@ -0,0 +1,54 @@ + + + + + beforeRunningCommand + nop + command + #!/usr/bin/env ruby + +require ENV['TM_SUPPORT_PATH'] + '/lib/textmate' +require ENV['TM_SUPPORT_PATH'] + '/lib/exit_codes' + +proj = ENV['TM_PROJECT_DIRECTORY'] +file = ENV['TM_FILEPATH'] + +line = ENV['TM_CURRENT_LINE'] +proc = ENV['TM_CURRENT_WORD'] + +if line.match(%r{\b([-a-z0-9_]+)\.#{proc}}i) + pkg = $1 + file = %x{egrep -il -r "create.*package *body *#{pkg}\\b" "#{proj}"}.split(/\n/).last + if file + res = %x{egrep -in "(function|procedure) *#{proc}" "#{file}"}.split(/\n/).last + else + TextMate.exit_show_tool_tip "Package #{pkg} not available" + end +else + res = %x{egrep -in "(function|procedure) *#{proc}" "#{file}"}.split(/\n/).last +end + +if res + data = res.split(/:/) + TextMate.go_to :file => file, :line => data[0], :column => 0 +else + file = file.sub(%r{#{proj}/?}, '') + TextMate.exit_show_tool_tip "Procedure #{proc} not found in #{file}" +end + + fallbackInput + word + input + selection + keyEquivalent + ^f + name + Find Procedure + output + showAsTooltip + scope + source.plsql.oracle + uuid + 1222BE8A-15D8-4C06-8965-F139A153DD97 + + diff --git a/Commands/Help.tmCommand b/Commands/Help.tmCommand new file mode 100644 index 0000000..1ce7c91 --- /dev/null +++ b/Commands/Help.tmCommand @@ -0,0 +1,78 @@ + + + + + beforeRunningCommand + nop + command + . "$TM_SUPPORT_PATH/lib/webpreview.sh" +html_header "Oracle PL/SQL Bundle Help" "Oracle" + +Markdown.pl <<'EOF' +# Help for the Oracle PL/SQL Bundle + +## Search Oracle Docs for Selection or Word + +The _Search Oracle Docs for Selection or Word_ command searches for the selected text or current word in the Oracle online documentation. + +## Run Script + +The _Run Script_ command takes the current file and runs it using SQL*Plus. + +## Run Selection or Line + +The _Run Selection or Line_ command takes the selected text or current line and submits it as a query using SQL*Plus. + +## Describe Selection or Word + +The _Describe Selection or Word_ command takes the selected text or current word and submits a describe command to SQL*Plus. + +## Open SQL*Plus + +The _Open SQL*Plus_ command opens up SQL*Plus in the project folder and logs in using the username, password and connectstring supplied as environment variables. Useful for running "interactive" SQL-scripts. + +## Find Procedure + +The _Find Procedure_ command will search for a procedure or function in a package body with the name of the current word. If it is found, the file containing it is shown and the cursor moves to the start of the procedure or function. + +### Environment Variables + +The commands assumes the following environment variables are properly set: + +* `$ORA_USER` - schema/username e.g. SCOTT +* `$ORA_PWD ` - password, e.g. TIGER +* `$ORA_CONNECT` - connect string, e.g. localhost:1521/ORCL + +These variables may be set in the parent shell of TextMate, global variables in TextMate preferences, or as project local variables. + +The commands all assume UTF-8 formatted files. + +## Extras + +### Importing a File + +You can import the contents of another file into the currently open file by dragging +it into the window. The contents will appear at the place you release it. + +### Tab Triggers + +There are a number of "tab triggers" defined which will insert useful code snippets into the current file. Look at the Oracle menu to see what these are and how to activate them. + +EOF + +html_footer + + input + none + keyEquivalent + ^H + name + Help + output + showAsHTML + scope + source.plsql.oracle + uuid + 69B47504-F6E5-44BB-A758-51DB35270B9C + + diff --git a/Commands/Run Script.tmCommand b/Commands/Run Script.tmCommand new file mode 100644 index 0000000..343e328 --- /dev/null +++ b/Commands/Run Script.tmCommand @@ -0,0 +1,44 @@ + + + + + beforeRunningCommand + nop + command + . "$TM_SUPPORT_PATH/lib/webpreview.sh" +html_header "Run ‘${TM_FILENAME}’" + +cd "$TM_DIRECTORY" + +NLS_LANG=AMERICAN_AMERICA.UTF8 +export NLS_LANG + +sqlplus -S -L /NOLOG <<EOF +set define off +whenever sqlerror exit failure rollback +prompt <pre> +connect "$ORA_USER"/"$ORA_PWD"@"$ORA_CONNECT" +show user +prompt Running $TM_FILENAME +@"$TM_FILENAME" +show errors +prompt </pre> +EOF + +echo "SQL*Plus exited." +html_footer + + input + none + keyEquivalent + @r + name + Run Script + output + showAsHTML + scope + source.plsql.oracle + uuid + BA59AADC-85C6-4215-BEFA-DF6BAAEFC7F5 + + diff --git a/Commands/Run Selection or Line.tmCommand b/Commands/Run Selection or Line.tmCommand new file mode 100644 index 0000000..bb25eea --- /dev/null +++ b/Commands/Run Selection or Line.tmCommand @@ -0,0 +1,49 @@ + + + + + beforeRunningCommand + nop + command + query=${TM_SELECTED_TEXT:-$TM_CURRENT_LINE} + +. "$TM_SUPPORT_PATH/lib/webpreview.sh" +html_header "Run Selection or Line" + +NLS_LANG=AMERICAN_AMERICA.UTF8 +export NLS_LANG + +sqlplus -S -L /NOLOG <<EOF +set define off +whenever sqlerror exit failure rollback +prompt <pre> +connect "$ORA_USER"/"$ORA_PWD"@"$ORA_CONNECT" +show user +prompt </pre> +set markup html on +$query +set markup html off +prompt <pre> +show errors +prompt </pre> +EOF + +echo "SQL*Plus exited." +html_footer + + fallbackInput + line + input + selection + keyEquivalent + @R + name + Run Selection or Line + output + showAsHTML + scope + source.plsql.oracle + uuid + 57DAAB63-8B29-4599-B25C-0A2661A702E3 + + diff --git a/Commands/Search Oracle Docs for Selection or Word.tmCommand b/Commands/Search Oracle Docs for Selection or Word.tmCommand new file mode 100644 index 0000000..a393c61 --- /dev/null +++ b/Commands/Search Oracle Docs for Selection or Word.tmCommand @@ -0,0 +1,28 @@ + + + + + beforeRunningCommand + nop + command + query=${TM_SELECTED_TEXT:-$TM_CURRENT_WORD} + +. "$TM_SUPPORT_PATH/lib/html.sh" +redirect "http://www.oracle.com/pls/db111/search?remark=quick_search&word=$query" + + fallbackInput + word + input + selection + keyEquivalent + ^h + name + Search Oracle Docs for Selection or Word + output + showAsHTML + scope + source.plsql.oracle + uuid + 2D735CC6-DF05-4725-A4FD-08DE33AAD9E4 + + diff --git a/DragCommands/Import File.tmDragCommand b/DragCommands/Import File.tmDragCommand new file mode 100644 index 0000000..f513d39 --- /dev/null +++ b/DragCommands/Import File.tmDragCommand @@ -0,0 +1,24 @@ + + + + + beforeRunningCommand + nop + command + cat "$TM_DROPPED_FILE" + draggedFileExtensions + + sql + + input + selection + name + Import File + output + insertAsSnippet + scope + source.plsql.oracle + uuid + 7CFC443C-623B-405B-8691-F109033BEA39 + + diff --git a/Preferences/Indent.tmPreferences b/Preferences/Indent.tmPreferences new file mode 100644 index 0000000..a1307ae --- /dev/null +++ b/Preferences/Indent.tmPreferences @@ -0,0 +1,19 @@ + + + + + name + Indent + scope + source.plsql.oracle + settings + + decreaseIndentPattern + (?i)^\s*(is|as|begin|end|then|else|elsif|exception)\b + increaseIndentPattern + (?i)^\s*(is|as|begin|if|then|else|elsif|loop|exception)\b + + uuid + 6A30BCDD-20CB-4E24-A1DC-5187E6AA36A6 + + diff --git a/Snippets/New Function.tmSnippet b/Snippets/New Function.tmSnippet new file mode 100644 index 0000000..b29b645 --- /dev/null +++ b/Snippets/New Function.tmSnippet @@ -0,0 +1,33 @@ + + + + + content + FUNCTION ${1:func_name}( + po_result_code OUT NUMBER) +RETURN ${2:RETURN_TYPE} +IS + l_procname VARCHAR2(30) := '${1/_(.)/\u$1/g}'; +BEGIN + Corelogger.Log_Open_Print_Close(pi_pkg_name, l_procname, + ${3:INITIAL STATE}); + po_result_code := Corecontainertask.c_result_success; + + $0 + + EXCEPTION + WHEN OTHERS THEN + Corelogger.Log_Open_PrintError_Close(pi_pkg_name, l_procname, + 'Exception: ' || SUBSTR(SQLERRM(SQLCODE), 1, 100)); + po_result_code := Corecontainertask.c_result_failure; +END $1; + name + New Function + scope + source.plsql.oracle + tabTrigger + func + uuid + 5873A2DA-C72C-40DB-8859-368CA8B3809E + + diff --git a/Snippets/New Procedure.tmSnippet b/Snippets/New Procedure.tmSnippet new file mode 100644 index 0000000..ad67640 --- /dev/null +++ b/Snippets/New Procedure.tmSnippet @@ -0,0 +1,32 @@ + + + + + content + PROCEDURE ${1:proc_name}( + po_result_code OUT NUMBER) +IS + l_procname VARCHAR2(30) := '${1/_(.)/\u$1/g}'; +BEGIN + Corelogger.Log_Open_Print_Close(pi_pkg_name, l_procname, + ${2:INITIAL STATE}); + po_result_code := Corecontainertask.c_result_success; + + $0 + + EXCEPTION + WHEN OTHERS THEN + Corelogger.Log_Open_PrintError_Close(pi_pkg_name, l_procname, + 'Exception: ' || SUBSTR(SQLERRM(SQLCODE), 1, 100)); + po_result_code := Corecontainertask.c_result_failure; +END $1; + name + New Procedure + scope + source.plsql.oracle + tabTrigger + proc + uuid + 9C4245C0-3B0F-4285-89EF-3256D30F973D + + diff --git a/Snippets/begin ___ end.tmSnippet b/Snippets/begin ___ end.tmSnippet new file mode 100644 index 0000000..8ecfa99 --- /dev/null +++ b/Snippets/begin ___ end.tmSnippet @@ -0,0 +1,22 @@ + + + + + content + BEGIN + $0 + +EXCEPTION + WHEN ${1:OTHERS} THEN + ${2:NULL}; +END; + name + begin ... end + scope + source.plsql.oracle + tabTrigger + begin + uuid + B938F8F9-0A4D-4279-8C97-1FAFF1FBDE60 + + diff --git a/Snippets/elsif ___.tmSnippet b/Snippets/elsif ___.tmSnippet new file mode 100644 index 0000000..b11ad79 --- /dev/null +++ b/Snippets/elsif ___.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + ELSIF ${1:condition} +THEN + $0 + name + elsif ... + scope + source.plsql.oracle + tabTrigger + e + uuid + 903299D6-F40E-44A8-BB51-F63F4CFA8B15 + + diff --git a/Snippets/fail.tmSnippet b/Snippets/fail.tmSnippet new file mode 100644 index 0000000..8f03e81 --- /dev/null +++ b/Snippets/fail.tmSnippet @@ -0,0 +1,20 @@ + + + + + content + IF po_result_code <> Corecontainertask.c_result_success +THEN + Corelogger.Log_Open_PrintError_Close(pi_pkg_name, l_procname, + $0); +END IF; + name + fail + scope + source.plsql.oracle + tabTrigger + fail + uuid + D0D94340-FC05-4955-A2D4-5E8ECFF51D3C + + diff --git a/Snippets/if ___ else ___ end.tmSnippet b/Snippets/if ___ else ___ end.tmSnippet new file mode 100644 index 0000000..ec09285 --- /dev/null +++ b/Snippets/if ___ else ___ end.tmSnippet @@ -0,0 +1,21 @@ + + + + + content + IF ${1:condition} +THEN + $2 +ELSE + $3 +END IF; + name + if ... else ... end + scope + source.plsql.oracle + tabTrigger + ife + uuid + 959C6497-92BE-4A63-BE61-B05F25C32E4F + + diff --git a/Snippets/if ___ end.tmSnippet b/Snippets/if ___ end.tmSnippet new file mode 100644 index 0000000..39a4797 --- /dev/null +++ b/Snippets/if ___ end.tmSnippet @@ -0,0 +1,19 @@ + + + + + content + IF ${1:condition} +THEN + $0 +END IF; + name + if ... end + scope + source.plsql.oracle + tabTrigger + if + uuid + 3A13DC3D-19E1-4002-9AB6-463C79DFC0C8 + + diff --git a/Snippets/log debug.tmSnippet b/Snippets/log debug.tmSnippet new file mode 100644 index 0000000..b4c0a6d --- /dev/null +++ b/Snippets/log debug.tmSnippet @@ -0,0 +1,17 @@ + + + + + content + Corelogger.Log_Open_PrintDebug_Close(pi_pkg_name, l_procname, + $0); + name + log debug + scope + source.plsql.oracle + tabTrigger + debug + uuid + A693AB6B-B6DC-450A-900B-D8706CB265F4 + + diff --git a/Snippets/log error.tmSnippet b/Snippets/log error.tmSnippet new file mode 100644 index 0000000..72f9605 --- /dev/null +++ b/Snippets/log error.tmSnippet @@ -0,0 +1,17 @@ + + + + + content + Corelogger.Log_Open_PrintError_Close(pi_pkg_name, l_procname, + $0); + name + log error + scope + source.plsql.oracle + tabTrigger + error + uuid + 530B58B1-3B40-4C01-8DC0-F56913D9B6D3 + + diff --git a/Snippets/log print.tmSnippet b/Snippets/log print.tmSnippet new file mode 100644 index 0000000..11336ff --- /dev/null +++ b/Snippets/log print.tmSnippet @@ -0,0 +1,17 @@ + + + + + content + Corelogger.Log_Open_Print_Close(pi_pkg_name, l_procname, + $0); + name + log print + scope + source.plsql.oracle + tabTrigger + print + uuid + 7D61E004-D3A6-4138-8EF3-F682C9F3EEAC + + diff --git a/Snippets/loop ___ end.tmSnippet b/Snippets/loop ___ end.tmSnippet new file mode 100644 index 0000000..fce10a3 --- /dev/null +++ b/Snippets/loop ___ end.tmSnippet @@ -0,0 +1,18 @@ + + + + + content + LOOP + $0 +END LOOP; + name + loop ... end + scope + source.plsql.oracle + tabTrigger + loop + uuid + 1AF4E476-2EB1-42D5-A12B-B9E53EE28D6E + + diff --git a/Snippets/success.tmSnippet b/Snippets/success.tmSnippet new file mode 100644 index 0000000..c228fce --- /dev/null +++ b/Snippets/success.tmSnippet @@ -0,0 +1,19 @@ + + + + + content + IF po_result_code = Corecontainertask.c_result_success +THEN + $0 +END IF; + name + success + scope + source.plsql.oracle + tabTrigger + success + uuid + BFC99B3F-C765-44C3-8FF2-4842D6FE3550 + + diff --git a/Syntaxes/PL SQL (Oracle).tmLanguage b/Syntaxes/PL SQL (Oracle).tmLanguage new file mode 100644 index 0000000..41ad144 --- /dev/null +++ b/Syntaxes/PL SQL (Oracle).tmLanguage @@ -0,0 +1,228 @@ + + + + + fileTypes + + sql + ddl + dml + + foldingStartMarker + (?i)^\s*(begin|if|loop)\b + foldingStopMarker + (?i)^\s*(end)\b + keyEquivalent + ^~S + name + PL/SQL (Oracle) + patterns + + + begin + /\* + end + \*/ + name + comment.block.oracle + + + match + --.*$ + name + comment.line.double-dash.oracle + + + captures + + 1 + + name + keyword.other.oracle + + 2 + + name + keyword.other.oracle + + + match + (?i)^\s*(create)(\s+or\s+replace)?\s+ + name + meta.create.oracle + + + captures + + 1 + + name + keyword.other.oracle + + 2 + + name + keyword.other.oracle + + 3 + + name + entity.name.type.oracle + + + match + (?i)\b(package)(\s+body)?\s+(\S+) + name + meta.package.oracle + + + captures + + 1 + + name + keyword.other.oracle + + 2 + + name + entity.name.type.oracle + + + match + (?i)\b(type)\s+"([^"]+)" + name + meta.type.oracle + + + captures + + 1 + + name + keyword.other.oracle + + 2 + + name + entity.name.function.oracle + + + match + (?i)^\s*(function|procedure)\s+([-a-z0-9_]+) + name + meta.procedure.oracle + + + match + [!<>:]?=|<>|<|>|\+|(?<!\.)\*|-|(?<!^)/|\|\| + name + keyword.operator.oracle + + + match + (?i)\b(true|false|null)\b + name + constant.language.oracle + + + match + \b\d+(\.\d+)?\b + name + constant.numeric.oracle + + + match + (?i)\b(if|elsif|else|end\s+if|loop|end\s+loop|for|case|end\s+case|continue|return|goto)\b + name + keyword.control.oracle + + + match + (?i)\b(or|and|not|like)\b + name + keyword.operator.oracle + + + match + (?i)\b(sysdate|%(isopen|found|notfound|rowcount)|commit|rollback|sqlerrm|substr|cast|decode|length|lower|upper)\b + name + support.function.oracle + + + match + (?i)\b(avg|count|sum|max|min|nvl|trim|to_date|to_char|lpad|ltrim|rpad|rtrim|trunc|to_number)\b + name + support.function.builtin.oracle + + + match + (?i)\b(sql|sqlcode)\b + name + variable.language.oracle + + + match + (?i)\b(p(i|o|io)_[-a-z0-9_]+)\b + name + variable.parameter.oracle + + + match + (?i)\b(l_[-a-z0-9_]+)\b + name + variable.other.oracle + + + match + (?i)\b(end|then|deterministic|exception|when|others|subtype|constant|range|binary_integer|declare|begin|in|out|is|as|exit|open|fetch|into|close|type|rowtype|default|\.(extend|count|first|last|next|nextval|currval))\b + name + keyword.other.oracle + + + match + (?i)\b(select|from|where|order\s+by|group\s+by|asc|desc|update|set|insert|into|values|delete|from|distinct|union|having|limit|table|of)\b + name + keyword.other.sql.oracle + + + match + (?i)\b(dbms_lock|dbms_output)\b + name + support.class.oracle + + + match + (?i)\b(put_line)\b + name + support.function.oracle + + + begin + ' + end + ' + name + string.quoted.single.oracle + + + begin + " + end + " + name + string.quoted.double.oracle + + + match + (?i)\b(number|integer|varchar2|boolean|date)\b + name + storage.type.oracle + + + scopeName + source.plsql.oracle + uuid + 28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163 + + diff --git a/Templates/Package Body.tmTemplate/info.plist b/Templates/Package Body.tmTemplate/info.plist new file mode 100644 index 0000000..767e427 --- /dev/null +++ b/Templates/Package Body.tmTemplate/info.plist @@ -0,0 +1,23 @@ + + + + + command + if [[ ! -f "$TM_NEW_FILE" ]]; then + TM_YEAR=`date +%Y` \ + TM_DATE=`date +%Y-%m-%d` \ + TM_USERNAME=`niutil -readprop / /users/\$USER realname` \ + PKG_NAME=`echo $TM_NEW_FILE_BASENAME | sed -e 's/[bBpP]_//'` \ + perl -pe 's/\$\{([^}]*)\}/$ENV{$1}/g' \ + < template_in.sql > "$TM_NEW_FILE" +fi + extension + sql + name + Package Body + scope + source.plsql.oracle + uuid + 57F59480-763B-470E-8F68-F3D748914397 + + diff --git a/Templates/Package Body.tmTemplate/template_in.sql b/Templates/Package Body.tmTemplate/template_in.sql new file mode 100644 index 0000000..096302f --- /dev/null +++ b/Templates/Package Body.tmTemplate/template_in.sql @@ -0,0 +1,10 @@ +CREATE OR REPLACE PACKAGE BODY ${PKG_NAME} AS + +/* + * ${TM_NEW_FILE_BASENAME} + * + * Created by ${TM_USERNAME} on ${TM_DATE}. + * Copyright (c) ${TM_YEAR} ${TM_ORGANIZATION_NAME}. All rights reserved. + */ + +END ${PKG_NAME}; diff --git a/Templates/Package Spec.tmTemplate/info.plist b/Templates/Package Spec.tmTemplate/info.plist new file mode 100644 index 0000000..64f814d --- /dev/null +++ b/Templates/Package Spec.tmTemplate/info.plist @@ -0,0 +1,23 @@ + + + + + command + if [[ ! -f "$TM_NEW_FILE" ]]; then + TM_YEAR=`date +%Y` \ + TM_DATE=`date +%Y-%m-%d` \ + TM_USERNAME=`niutil -readprop / /users/\$USER realname` \ + PKG_NAME=`echo $TM_NEW_FILE_BASENAME | sed -e 's/[sShH]_//'` \ + perl -pe 's/\$\{([^}]*)\}/$ENV{$1}/g' \ + < template_in.sql > "$TM_NEW_FILE" +fi + extension + sql + name + Package Spec + scope + source.plsql.oracle + uuid + 28C843B4-D6AC-41D6-AAC6-FAD73ED75480 + + diff --git a/Templates/Package Spec.tmTemplate/template_in.sql b/Templates/Package Spec.tmTemplate/template_in.sql new file mode 100644 index 0000000..f0c4f27 --- /dev/null +++ b/Templates/Package Spec.tmTemplate/template_in.sql @@ -0,0 +1,10 @@ +CREATE OR REPLACE PACKAGE ${PKG_NAME} AS + +/* + * ${TM_NEW_FILE_BASENAME} + * + * Created by ${TM_USERNAME} on ${TM_DATE}. + * Copyright (c) ${TM_YEAR} ${TM_ORGANIZATION_NAME}. All rights reserved. + */ + +END ${PKG_NAME}; diff --git a/info.plist b/info.plist new file mode 100644 index 0000000..2dd4009 --- /dev/null +++ b/info.plist @@ -0,0 +1,78 @@ + + + + + deleted + + 8B1DCEE6-B8AB-4F8D-9CC8-956E1112EEBA + 48E69EA5-2B92-4A98-B286-DB9B0F2DC754 + 62ECD070-A76E-4CFF-A988-FE6BBEBE0634 + 61B7BDFE-8AEA-473A-B840-A200D8B9C129 + B64143F2-75CD-4C35-9E4F-E8D5425CA37D + 393785DE-0BC1-43E8-963E-763AB2EABAE0 + E73B43E3-2343-4E22-8CB7-C4EB2EC9623A + + mainMenu + + items + + 2D735CC6-DF05-4725-A4FD-08DE33AAD9E4 + ------------------------------------ + BA59AADC-85C6-4215-BEFA-DF6BAAEFC7F5 + 57DAAB63-8B29-4599-B25C-0A2661A702E3 + 65257C54-A07C-4764-961C-B892F28A89DF + C90FDB5C-2F32-44EE-9059-8E0CA0CC9246 + ------------------------------------ + 1222BE8A-15D8-4C06-8965-F139A153DD97 + 69B47504-F6E5-44BB-A758-51DB35270B9C + ------------------------------------ + 9C4245C0-3B0F-4285-89EF-3256D30F973D + 5873A2DA-C72C-40DB-8859-368CA8B3809E + ------------------------------------ + B938F8F9-0A4D-4279-8C97-1FAFF1FBDE60 + 959C6497-92BE-4A63-BE61-B05F25C32E4F + 3A13DC3D-19E1-4002-9AB6-463C79DFC0C8 + 903299D6-F40E-44A8-BB51-F63F4CFA8B15 + 1AF4E476-2EB1-42D5-A12B-B9E53EE28D6E + 7D61E004-D3A6-4138-8EF3-F682C9F3EEAC + A693AB6B-B6DC-450A-900B-D8706CB265F4 + 530B58B1-3B40-4C01-8DC0-F56913D9B6D3 + D0D94340-FC05-4955-A2D4-5E8ECFF51D3C + BFC99B3F-C765-44C3-8FF2-4842D6FE3550 + + submenus + + + name + Oracle + ordering + + 28DCE4DD-F5E1-4ED3-8847-64DA6B1F9163 + 6A30BCDD-20CB-4E24-A1DC-5187E6AA36A6 + 2D735CC6-DF05-4725-A4FD-08DE33AAD9E4 + BA59AADC-85C6-4215-BEFA-DF6BAAEFC7F5 + 57DAAB63-8B29-4599-B25C-0A2661A702E3 + 65257C54-A07C-4764-961C-B892F28A89DF + C90FDB5C-2F32-44EE-9059-8E0CA0CC9246 + 1222BE8A-15D8-4C06-8965-F139A153DD97 + 69B47504-F6E5-44BB-A758-51DB35270B9C + 7CFC443C-623B-405B-8691-F109033BEA39 + 9C4245C0-3B0F-4285-89EF-3256D30F973D + 5873A2DA-C72C-40DB-8859-368CA8B3809E + B938F8F9-0A4D-4279-8C97-1FAFF1FBDE60 + 959C6497-92BE-4A63-BE61-B05F25C32E4F + 3A13DC3D-19E1-4002-9AB6-463C79DFC0C8 + 903299D6-F40E-44A8-BB51-F63F4CFA8B15 + 1AF4E476-2EB1-42D5-A12B-B9E53EE28D6E + 7D61E004-D3A6-4138-8EF3-F682C9F3EEAC + A693AB6B-B6DC-450A-900B-D8706CB265F4 + 530B58B1-3B40-4C01-8DC0-F56913D9B6D3 + D0D94340-FC05-4955-A2D4-5E8ECFF51D3C + BFC99B3F-C765-44C3-8FF2-4842D6FE3550 + 28C843B4-D6AC-41D6-AAC6-FAD73ED75480 + 57F59480-763B-470E-8F68-F3D748914397 + + uuid + 2C32654D-4D00-4F18-8B6B-322F7770E831 + +