PL / SQL開発者向けの崇高なテキスト

PL / SQLの優れた開発ツールとして使用できるSublime Textがどれだけ多くあるかについて話したかった。



SQL、特にOracle PL / SQL、特にToad for Oracle、SQL Navigator、PL / SQL Developer、さらには無料のOracle SQLなど、多くのIDEを使用するように思われるため、このバイクの目的から始めたいと思いますしかし、開発者には、Emacs、SciTe、Vim、Notepad ++、Sublime Textなどのテキストエディターと比較して、それらのほとんどにいくつかの欠点があります。



それらのいくつかをリストしますが、このリストは純粋に主観的なものです。





別のポイントもありますが、それは職場でのプロジェクトとタスクの編成に関連しています。 プロジェクトの組織がSublime Textの設定にマークを残したので、このトピックについて少し触れたいと思います。



私たちには、1つのルールがあります-「真実はソースにあります」。 つまり データベース自体ではなく、ソースファイルを直接操作します。 まず第一に、バージョン管理が必要であり、ソース管理バージョンシステムをキャンセルした人はいないためです。 したがって、たとえば、クライアント自身がデータベースにクロールし、たとえばプロシージャまたはパッケージ内でペンで修正した場合の不一致を理解するために、現在ベースにあるものとSVNにあるものを常に見ることができます。 また、職場では、すべてがsqlplusを通過します。



プロジェクトでは、ソースに特定のストレージ構造を採用しました。各ファイルには独自のオブジェクトが含まれています。 たとえば、タスクのテーブルは「tables」フォルダーにあり、ファイル名は「table_contract.tab.sql」テーブルの名前、ビューは「views」フォルダーにあり、ファイルの名前は「vv_table_contract.sql」、パッケージは「packages」フォルダーにあります。 「また、パッケージファイルの名前は「contract_utl_spec.sql」および「contract_utl_body.sql」などであり、基本的な概念は明確でシンプルです。



構造、SVN、バージョンのリリース、クライアントの更新などがどのように構成されているかが興味深い場合 実際にはSQLとPL / SQLのみで記述していることを考えると、HabréのSQLコードの編成に関する記事はありましたが、このトピックに関する記事を書くことができます。



構文およびデータベースオブジェクトの強調表示



簡単なものから始めましょう-これは構文の強調表示です。 これはカラーパレットに関するものではなく、これは個人的な問題ですが、データベースオブジェクトを強調表示します。 それは便利であり、コードはより明確で理解しやすくなります。 以下に例を示します。







オブジェクトを強調表示するには、ファイル(PL_SQL(Oracle).tmLanguage)を使用して、 github.com / bizoo / OracleSQLプラグインの構文を強調表示します。これについては後で説明します。



ファイルに新しいタグを追加します。



<dict> <key>match</key> <string>(?i)\b()\b</string> <key>name</key> <string>dbobject.oracle</string> </dict>
      
      





括弧の間に、強調表示のために新しいデータベースオブジェクトを追加します。 テーブルとビューがあります。 簡単なスクリプトでオブジェクトのリストを取得します。



 select lower(rtrim(xmlcast(xmlagg(xmlelement(e,object_name,'|') order by object_name) as clob),'|')) from all_objects where owner = user and object_type in ('TABLE', 'VIEW') order by object_name
      
      





オブジェクトの色を調整するために残ります。これはテーマファイルで行われます.. \パッケージ\カラースキーム-デフォルト\ YourTheme.tmTheme。 ファイルに追加:



 <dict> <key>name</key> <string>String</string> <key>scope</key> <string>dbobject.oracle</string> <key>settings</key> <dict> <key>foreground</key> <string>#7F7F00</string> </dict> </dict>
      
      





オブジェクトのツールチップ



ctrl +スペースの組み合わせを使用してオブジェクトのツールチップを設定し、単語またはオブジェクト名を完成させるために、別のファイル「db_objects.sublime-completions」が作成されました。次のようになります。



 { "scope": "source.plsql.oracle", "completions": [ {"trigger": "abon_device\tTABLE", "contents": "abon_device"}, {"trigger": "abon_device_conflict\tTABLE", "contents": "abon_device_conflict"}, {"trigger": "abon_device_err\tTABLE", "contents": "abon_device_err"} … ] }
      
      





これは、Ctrl +スペースの組み合わせをトリガーするSublime Textの標準形式です。 データベースオブジェクトを強調表示するためのデータとほぼ同じスクリプトで必要なデータを取得します。



 select '{"trigger": "'||object_name||'\t'||object_type||'", "contents": "'||object_name||'"},' from all_objects where owner = user and object_type in ('TABLE', 'VIEW') order by object_name
      
      





単語を補完したり、DBオブジェクトに名前を付けたりするために、プラグイン「すべてのオートコンプリート」を使用します。このプラグインは、開いているすべてのタブをスキャンし、重複を除いてすべての単語を選択し、ツールチップに表示します。 最終的には、このようになります。







バージョン管理システム



バージョン管理システムとして、SVNを使用します。 Sublime Textにはリポジトリにさまざまなプラグインがあり、「TourtoiseSVN」に決めました。シンプルで必要な基本操作は、コミット、更新、ログの表示、対応するホットキーとの差分(Alt + C、Alt + L、Alt + U)によって実行され、また、タグ付けやマージなど、より複雑なものには、同じ名前のクライアントがあります。



オブジェクトを検索する



タスク(プロジェクト)内のオブジェクトを検索するには、Sublime Text-Goto Anythingの標準機能と、自分で作成した小さなプラグインの両方を使用します。 プラグインは非常にシンプルで、実際には標準のGoto Anythingをわずかに補完するため、カーソルが入力フィールドにある単語をすぐに追加します。 プラグインコード:



 import sublime, sublime_plugin import os.path, string import re class MeOpenCommand(sublime_plugin.WindowCommand): def run(self): view = self.window.active_view() for region in view.sel(): if region.begin() == region.end(): word = view.word(region) else: word = region if not word.empty(): keyword = view.substr(word) self.window.run_command("show_overlay", {"overlay": "goto", "show_files": "true", "text": keyword})
      
      





記事の冒頭で説明したプロジェクトファイルの構造をどのように整理したかを考えると、必要なオブジェクトにすばやくアクセスするための機能が得られました。







コード実行



次に、最も興味深い部分に進みましょう。SublimeTextからスクリプトを実行/ローリングします。 これらの目標を達成するために、ニーズと要件に合わせて変更されたgithub.com/bizoo/OracleSQLパッケージを使用します。 変更は、主にプラグインを簡素化するという点で行われました。 プラグイン自体も作成者のニーズに合わせて少し研ぎ澄まされています。 プラグインは次のようになります。



oracle_exec.py



 import sublime, sublime_plugin execcmd = __import__("exec") import re import os import thread import subprocess class OracleExecCommand(execcmd.ExecCommand): def run(self, dsn="", **kwargs): #     , sqlplus.exe,  ,      Sublime Text cmd = ["sqlplus.exe", dsn, "@", self.window.active_view().file_name()] #          F4  Shift+F4   ,     Sublime Text. super(OracleExecCommand, self).run(cmd, "($file)(^([0-9]+))", "(^ORA-([0-9]+)(.+)(.+)$)|(PLS-([0-9]+)(.+)$)", **kwargs)
      
      





oracle_functions.py



 import sublime, sublime_plugin #            ,        ,  2        sqlplus instance_list = [["DB1", "user/pass@tnsname"], ["DB2", "user/pass@tnsname"]] class OracleExecuteListCommand(sublime_plugin.WindowCommand): def run(self, *args, **kwargs): self.window.show_quick_panel(instance_list, self._quick_panel_callback) def _quick_panel_callback(self, index): if (index > -1): self.window.run_command("oracle_exec", {"dsn": instance_list[index][1]})
      
      





次のようになります。







単純なSQLクエリも同じ方法で実行できます。 必要なことは、sqlplusを設定することだけです。このため、sqlplusを介して接続するたびに機能するlogin.sqlを使用してみてください。 私はこれをしませんでした。必要なコマンドのスニペットを作成しただけです。または、一般に、すべてが事前に記録されているこれらの目的のために1つのファイルを保持できます。







まとめ



その結果、PL / SQLを開発するための迅速で簡単で無料のクロスプラットフォームで簡単に拡張可能なツールを手に入れました。これは職場のルールにも完全に適合します。



PS:この「ビルド」には欠陥があることは理解していますが、私にとっては重要ではありません。怠を克服した場合、さらに追加できます。



All Articles