diff --git a/PL_SQL (Oracle).tmLanguage b/PL_SQL (Oracle).tmLanguage index e236b5c..23419c1 100644 --- a/PL_SQL (Oracle).tmLanguage +++ b/PL_SQL (Oracle).tmLanguage @@ -7,6 +7,11 @@ sql ddl dml + pks + pkb + fnc + prc + pck foldingStartMarker (?i)^\s*(begin|if|loop)\b @@ -181,7 +186,7 @@ match - (?i)\b(with|select|from|where|order\s+by|group\s+by|asc|desc|update|set|insert|into|values|delete|from|distinct|union|having|limit|table|between|of|all|any|exists|rownum|cursor)\b + (?i)\b(with|select|from|join|where|order\s+by|group\s+by|asc|desc|update|set|insert|into|values|delete|from|distinct|union|having|limit|table|between|of|all|any|exists|rownum|cursor|returning|merge|using|on|matched)\b name keyword.other.sql.oracle diff --git a/RunSQL.sql b/RunSQL.sql index cad1e81..e1e32c3 100644 --- a/RunSQL.sql +++ b/RunSQL.sql @@ -5,8 +5,12 @@ SET FEEDBACK OFF @&1 SELECT 'Filename: &1' FROM DUAL; SELECT '(' || TYPE || ' ' || NAME || '/0:' || POSITION || ')' || ' ' || LINE || ':' || POSITION || ' ' || TEXT as ERRORS - FROM USER_ERRORS + FROM ALL_ERRORS WHERE line <> 0 - AND TYPE || ' ' || NAME in (&2) + AND ( + TYPE || ' ' || OWNER || '.' || NAME in (&2) + OR + (OWNER = USER AND TYPE || ' ' || NAME in (&2)) + ) ORDER BY NAME, TYPE, SEQUENCE; exit diff --git a/oracle_exec.py b/oracle_exec.py index 4728b80..52a91fc 100644 --- a/oracle_exec.py +++ b/oracle_exec.py @@ -16,12 +16,15 @@ def run(self, dsn="", **kwargs): # Find entities declaration in source self.entities = oracle_lib.find_entities(self.window.active_view()) # Create a string for the in of sql command - sqlfilter = '"' + ",".join("'%s'" % entity for entity in self.entities.keys()) + '"' + if len(self.entities) == 0: + sqlfilter = "\"''\"" + else: + sqlfilter = '"' + ",".join("'%s'" % entity for entity in self.entities.keys()) + '"' - cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), - self.window.active_view().file_name(), sqlfilter] + (directory, filename) = os.path.split(self.window.active_view().file_name()) + cmd = ["sqlplus.exe", "-s", dsn, "@", os.path.join(sublime.packages_path(), 'OracleSQL', 'RunSQL.sql'), '"'+filename+'"', sqlfilter] - super(OracleExecCommand, self).run(cmd, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", **kwargs) + super(OracleExecCommand, self).run(cmd, "^Filename: (.+)$", "^\\(.+?/([0-9]+):([0-9]+)\\) [0-9]+:[0-9]+ (.+)$", working_dir=directory, **kwargs) def append_data(self, proc, data): # Update the line number of output_view with the correct line number of source view diff --git a/oracle_lib.py b/oracle_lib.py index df5854a..21a3104 100644 --- a/oracle_lib.py +++ b/oracle_lib.py @@ -6,7 +6,7 @@ def find_entities(view): Return all 'create or replace' type and name in the script. """ results = [] - positions = view.find_all(r'(?im)create\s+(?:or\s+replace\s+)?(?:force\s+)?(package(?:\s+body)?|procedure|function|trigger|view|type)\s+(\w+\.)?(\w+)', 0, "$1 $3", results) + positions = view.find_all(r'(?im)create\s+(?:or\s+replace\s+)?(?:force\s+)?(package(?:\s+body)?|procedure|function|trigger|view|type)\s+(\w+\.)?(\w+)', 0, "$1 $2$3", results) return dict((val.upper(), view.rowcol(pos.begin())[0]) for (pos, val) in zip(positions, results)) diff --git a/readme.rst b/readme.rst index 24eb1c7..97f4e48 100644 --- a/readme.rst +++ b/readme.rst @@ -1,5 +1,5 @@ ========================================================= -Sublime Text 2 plackage for editing Oracle SQL and PL/SQL +Sublime Text 2 package for editing Oracle SQL and PL/SQL ========================================================= Language definition and execution utilities for Oracle PL/SQL files.