blob: 173c22f7614ed7c9916d4b5d65755d7d00129fc4 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: Oracle Procedureal SQL (PL/SQL)
3" Maintainer: Jeff Lanzarotta (jefflanzarotta at yahoo dot com)
4" Original Maintainer: C. Laurence Gonsalves (clgonsal@kami.com)
5" URL: http://lanzarotta.tripod.com/vim/syntax/plsql.vim.zip
6" Last Change: September 18, 2002
7" History: Geoff Evans & Bill Pribyl (bill at plnet dot org)
8" Added 9i keywords.
9" Austin Ziegler (austin at halostatue dot ca)
10" Added 8i+ features.
11"
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020012" quit when a syntax file was already loaded
13if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000014 finish
15endif
16
17" Todo.
18syn keyword plsqlTodo TODO FIXME XXX DEBUG NOTE
19syn cluster plsqlCommentGroup contains=plsqlTodo
20
21syn case ignore
22
23syn match plsqlGarbage "[^ \t()]"
24syn match plsqlIdentifier "[a-z][a-z0-9$_#]*"
25syn match plsqlHostIdentifier ":[a-z][a-z0-9$_#]*"
26
27" When wanted, highlight the trailing whitespace.
28if exists("c_space_errors")
29 if !exists("c_no_trail_space_error")
30 syn match plsqlSpaceError "\s\+$"
31 endif
32
33 if !exists("c_no_tab_space_error")
34 syn match plsqlSpaceError " \+\t"me=e-1
35 endif
36endif
37
38" Symbols.
39syn match plsqlSymbol "\(;\|,\|\.\)"
40
41" Operators.
42syn match plsqlOperator "\(+\|-\|\*\|/\|=\|<\|>\|@\|\*\*\|!=\|\~=\)"
43syn match plsqlOperator "\(^=\|<=\|>=\|:=\|=>\|\.\.\|||\|<<\|>>\|\"\)"
44
45" Some of Oracle's SQL keywords.
46syn keyword plsqlSQLKeyword ABORT ACCESS ACCESSED ADD AFTER ALL ALTER AND ANY
47syn keyword plsqlSQLKeyword AS ASC ATTRIBUTE AUDIT AUTHORIZATION AVG BASE_TABLE
48syn keyword plsqlSQLKeyword BEFORE BETWEEN BY CASCADE CAST CHECK CLUSTER
49syn keyword plsqlSQLKeyword CLUSTERS COLAUTH COLUMN COMMENT COMPRESS CONNECT
50syn keyword plsqlSQLKeyword CONSTRAINT CRASH CREATE CURRENT DATA DATABASE
51syn keyword plsqlSQLKeyword DATA_BASE DBA DEFAULT DELAY DELETE DESC DISTINCT
52syn keyword plsqlSQLKeyword DROP DUAL ELSE EXCLUSIVE EXISTS EXTENDS EXTRACT
53syn keyword plsqlSQLKeyword FILE FORCE FOREIGN FROM GRANT GROUP HAVING HEAP
54syn keyword plsqlSQLKeyword IDENTIFIED IDENTIFIER IMMEDIATE IN INCLUDING
55syn keyword plsqlSQLKeyword INCREMENT INDEX INDEXES INITIAL INSERT INSTEAD
56syn keyword plsqlSQLKeyword INTERSECT INTO INVALIDATE IS ISOLATION KEY LIBRARY
57syn keyword plsqlSQLKeyword LIKE LOCK MAXEXTENTS MINUS MODE MODIFY MULTISET
58syn keyword plsqlSQLKeyword NESTED NOAUDIT NOCOMPRESS NOT NOWAIT OF OFF OFFLINE
59syn keyword plsqlSQLKeyword ON ONLINE OPERATOR OPTION OR ORDER ORGANIZATION
60syn keyword plsqlSQLKeyword PCTFREE PRIMARY PRIOR PRIVATE PRIVILEGES PUBLIC
61syn keyword plsqlSQLKeyword QUOTA RELEASE RENAME REPLACE RESOURCE REVOKE ROLLBACK
62syn keyword plsqlSQLKeyword ROW ROWLABEL ROWS SCHEMA SELECT SEPARATE SESSION SET
63syn keyword plsqlSQLKeyword SHARE SIZE SPACE START STORE SUCCESSFUL SYNONYM
64syn keyword plsqlSQLKeyword SYSDATE TABLE TABLES TABLESPACE TEMPORARY TO TREAT
65syn keyword plsqlSQLKeyword TRIGGER TRUNCATE UID UNION UNIQUE UNLIMITED UPDATE
66syn keyword plsqlSQLKeyword USE USER VALIDATE VALUES VIEW WHENEVER WHERE WITH
67
68" PL/SQL's own keywords.
69syn keyword plsqlKeyword AGENT AND ANY ARRAY ASSIGN AS AT AUTHID BEGIN BODY BY
70syn keyword plsqlKeyword BULK C CASE CHAR_BASE CHARSETFORM CHARSETID CLOSE
71syn keyword plsqlKeyword COLLECT CONSTANT CONSTRUCTOR CONTEXT CURRVAL DECLARE
72syn keyword plsqlKeyword DVOID EXCEPTION EXCEPTION_INIT EXECUTE EXIT FETCH
73syn keyword plsqlKeyword FINAL FUNCTION GOTO HASH IMMEDIATE IN INDICATOR
74syn keyword plsqlKeyword INSTANTIABLE IS JAVA LANGUAGE LIBRARY MAP MAXLEN
75syn keyword plsqlKeyword MEMBER NAME NEW NOCOPY NUMBER_BASE OBJECT OCICOLL
76syn keyword plsqlKeyword OCIDATE OCIDATETIME OCILOBLOCATOR OCINUMBER OCIRAW
77syn keyword plsqlKeyword OCISTRING OF OPAQUE OPEN OR ORDER OTHERS OUT
78syn keyword plsqlKeyword OVERRIDING PACKAGE PARALLEL_ENABLE PARAMETERS
79syn keyword plsqlKeyword PARTITION PIPELINED PRAGMA PROCEDURE RAISE RANGE REF
80syn keyword plsqlKeyword RESULT RETURN REVERSE ROWTYPE SB1 SELF SHORT SIZE_T
81syn keyword plsqlKeyword SQL SQLCODE SQLERRM STATIC STRUCT SUBTYPE TDO THEN
82syn keyword plsqlKeyword TABLE TIMEZONE_ABBR TIMEZONE_HOUR TIMEZONE_MINUTE
83syn keyword plsqlKeyword TIMEZONE_REGION TYPE UNDER UNSIGNED USING VARIANCE
84syn keyword plsqlKeyword VARRAY VARYING WHEN WRITE
85syn match plsqlKeyword "\<END\>"
86syn match plsqlKeyword "\.COUNT\>"hs=s+1
87syn match plsqlKeyword "\.EXISTS\>"hs=s+1
88syn match plsqlKeyword "\.FIRST\>"hs=s+1
89syn match plsqlKeyword "\.LAST\>"hs=s+1
90syn match plsqlKeyword "\.DELETE\>"hs=s+1
91syn match plsqlKeyword "\.PREV\>"hs=s+1
92syn match plsqlKeyword "\.NEXT\>"hs=s+1
93
94" PL/SQL functions.
95syn keyword plsqlFunction ABS ACOS ADD_MONTHS ASCII ASCIISTR ASIN ATAN ATAN2
96syn keyword plsqlFunction BFILENAME BITAND CEIL CHARTOROWID CHR COALESCE
97syn keyword plsqlFunction COMMIT COMMIT_CM COMPOSE CONCAT CONVERT COS COSH
98syn keyword plsqlFunction COUNT CUBE CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP
99syn keyword plsqlFunction DBTIMEZONE DECODE DECOMPOSE DEREF DUMP EMPTY_BLOB
100syn keyword plsqlFunction EMPTY_CLOB EXISTS EXP FLOOR FROM_TZ GETBND GLB
101syn keyword plsqlFunction GREATEST GREATEST_LB GROUPING HEXTORAW INITCAP
102syn keyword plsqlFunction INSTR INSTR2 INSTR4 INSTRB INSTRC ISNCHAR LAST_DAY
103syn keyword plsqlFunction LEAST LEAST_UB LENGTH LENGTH2 LENGTH4 LENGTHB LENGTHC
104syn keyword plsqlFunction LN LOCALTIME LOCALTIMESTAMP LOG LOWER LPAD
105syn keyword plsqlFunction LTRIM LUB MAKE_REF MAX MIN MOD MONTHS_BETWEEN
106syn keyword plsqlFunction NCHARTOROWID NCHR NEW_TIME NEXT_DAY NHEXTORAW
107syn keyword plsqlFunction NLS_CHARSET_DECL_LEN NLS_CHARSET_ID NLS_CHARSET_NAME
108syn keyword plsqlFunction NLS_INITCAP NLS_LOWER NLSSORT NLS_UPPER NULLFN NULLIF
109syn keyword plsqlFunction NUMTODSINTERVAL NUMTOYMINTERVAL NVL POWER
110syn keyword plsqlFunction RAISE_APPLICATION_ERROR RAWTOHEX RAWTONHEX REF
111syn keyword plsqlFunction REFTOHEX REPLACE ROLLBACK_NR ROLLBACK_SV ROLLUP ROUND
112syn keyword plsqlFunction ROWIDTOCHAR ROWIDTONCHAR ROWLABEL RPAD RTRIM
113syn keyword plsqlFunction SAVEPOINT SESSIONTIMEZONE SETBND SET_TRANSACTION_USE
114syn keyword plsqlFunction SIGN SIN SINH SOUNDEX SQLCODE SQLERRM SQRT STDDEV
115syn keyword plsqlFunction SUBSTR SUBSTR2 SUBSTR4 SUBSTRB SUBSTRC SUM
116syn keyword plsqlFunction SYS_AT_TIME_ZONE SYS_CONTEXT SYSDATE SYS_EXTRACT_UTC
117syn keyword plsqlFunction SYS_GUID SYS_LITERALTODATE SYS_LITERALTODSINTERVAL
118syn keyword plsqlFunction SYS_LITERALTOTIME SYS_LITERALTOTIMESTAMP
119syn keyword plsqlFunction SYS_LITERALTOTZTIME SYS_LITERALTOTZTIMESTAMP
120syn keyword plsqlFunction SYS_LITERALTOYMINTERVAL SYS_OVER__DD SYS_OVER__DI
121syn keyword plsqlFunction SYS_OVER__ID SYS_OVER_IID SYS_OVER_IIT
122syn keyword plsqlFunction SYS_OVER__IT SYS_OVER__TI SYS_OVER__TT
123syn keyword plsqlFunction SYSTIMESTAMP TAN TANH TO_ANYLOB TO_BLOB TO_CHAR
124syn keyword plsqlFunction TO_CLOB TO_DATE TO_DSINTERVAL TO_LABEL TO_MULTI_BYTE
125syn keyword plsqlFunction TO_NCHAR TO_NCLOB TO_NUMBER TO_RAW TO_SINGLE_BYTE
126syn keyword plsqlFunction TO_TIME TO_TIMESTAMP TO_TIMESTAMP_TZ TO_TIME_TZ
127syn keyword plsqlFunction TO_YMINTERVAL TRANSLATE TREAT TRIM TRUNC TZ_OFFSET UID
128syn keyword plsqlFunction UNISTR UPPER UROWID USER USERENV VALUE VARIANCE
129syn keyword plsqlFunction VSIZE WORK XOR
130syn match plsqlFunction "\<SYS\$LOB_REPLICATION\>"
131
132" PL/SQL Exceptions
133syn keyword plsqlException ACCESS_INTO_NULL CASE_NOT_FOUND COLLECTION_IS_NULL
134syn keyword plsqlException CURSOR_ALREADY_OPEN DUP_VAL_ON_INDEX INVALID_CURSOR
135syn keyword plsqlException INVALID_NUMBER LOGIN_DENIED NO_DATA_FOUND
136syn keyword plsqlException NOT_LOGGED_ON PROGRAM_ERROR ROWTYPE_MISMATCH
137syn keyword plsqlException SELF_IS_NULL STORAGE_ERROR SUBSCRIPT_BEYOND_COUNT
138syn keyword plsqlException SUBSCRIPT_OUTSIDE_LIMIT SYS_INVALID_ROWID
139syn keyword plsqlException TIMEOUT_ON_RESOURCE TOO_MANY_ROWS VALUE_ERROR
140syn keyword plsqlException ZERO_DIVIDE
141
142" Oracle Pseudo Colums.
143syn keyword plsqlPseudo CURRVAL LEVEL NEXTVAL ROWID ROWNUM
144
145if exists("plsql_highlight_triggers")
146 syn keyword plsqlTrigger INSERTING UPDATING DELETING
147endif
148
149" Conditionals.
150syn keyword plsqlConditional ELSIF ELSE IF
151syn match plsqlConditional "\<END\s\+IF\>"
152
153" Loops.
154syn keyword plsqlRepeat FOR LOOP WHILE FORALL
155syn match plsqlRepeat "\<END\s\+LOOP\>"
156
157" Various types of comments.
158if exists("c_comment_strings")
159 syntax match plsqlCommentSkip contained "^\s*\*\($\|\s\+\)"
160 syntax region plsqlCommentString contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=plsqlCommentSkip
161 syntax region plsqlComment2String contained start=+L\="+ skip=+\\\\\|\\"+ end=+"+ end="$"
162 syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError
163 syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlComment2String,plsqlCharLiteral,plsqlBooleanLiteral,plsqlNumbersCom,plsqlSpaceError
164else
165 syntax region plsqlCommentL start="--" skip="\\$" end="$" keepend contains=@plsqlCommentGroup,plsqlSpaceError
166 syntax region plsqlComment start="/\*" end="\*/" contains=@plsqlCommentGroup,plsqlSpaceError
167endif
168
169syn sync ccomment plsqlComment
170syn sync ccomment plsqlCommentL
171
172" To catch unterminated string literals.
173syn match plsqlStringError "'.*$"
174
175" Various types of literals.
176syn match plsqlNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
177syn match plsqlNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=plsqlIntLiteral,plsqlFloatLiteral
178syn match plsqlIntLiteral contained "[+-]\=\d\+"
179syn match plsqlFloatLiteral contained "[+-]\=\d\+\.\d*"
180syn match plsqlFloatLiteral contained "[+-]\=\d*\.\d*"
181syn match plsqlCharLiteral "'[^']'"
182syn match plsqlStringLiteral "'\([^']\|''\)*'"
183syn keyword plsqlBooleanLiteral TRUE FALSE NULL
184
185" The built-in types.
186syn keyword plsqlStorage ANYDATA ANYTYPE BFILE BINARY_INTEGER BLOB BOOLEAN
187syn keyword plsqlStorage BYTE CHAR CHARACTER CLOB CURSOR DATE DAY DEC DECIMAL
188syn keyword plsqlStorage DOUBLE DSINTERVAL_UNCONSTRAINED FLOAT HOUR
189syn keyword plsqlStorage INT INTEGER INTERVAL LOB LONG MINUTE
190syn keyword plsqlStorage MLSLABEL MONTH NATURAL NATURALN NCHAR NCHAR_CS NCLOB
191syn keyword plsqlStorage NUMBER NUMERIC NVARCHAR PLS_INT PLS_INTEGER
192syn keyword plsqlStorage POSITIVE POSITIVEN PRECISION RAW REAL RECORD
193syn keyword plsqlStorage SECOND SIGNTYPE SMALLINT STRING SYS_REFCURSOR TABLE TIME
194syn keyword plsqlStorage TIMESTAMP TIMESTAMP_UNCONSTRAINED
195syn keyword plsqlStorage TIMESTAMP_TZ_UNCONSTRAINED
196syn keyword plsqlStorage TIMESTAMP_LTZ_UNCONSTRAINED UROWID VARCHAR
197syn keyword plsqlStorage VARCHAR2 YEAR YMINTERVAL_UNCONSTRAINED ZONE
198
199" A type-attribute is really a type.
200syn match plsqlTypeAttribute "%\(TYPE\|ROWTYPE\)\>"
201
202" All other attributes.
203syn match plsqlAttribute "%\(BULK_EXCEPTIONS\|BULK_ROWCOUNT\|ISOPEN\|FOUND\|NOTFOUND\|ROWCOUNT\)\>"
204
205" This'll catch mis-matched close-parens.
206syn cluster plsqlParenGroup contains=plsqlParenError,@plsqlCommentGroup,plsqlCommentSkip,plsqlIntLiteral,plsqlFloatLiteral,plsqlNumbersCom
207if exists("c_no_bracket_error")
208 syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup
209 syn match plsqlParenError ")"
210 syn match plsqlErrInParen contained "[{}]"
211else
212 syn region plsqlParen transparent start='(' end=')' contains=ALLBUT,@plsqlParenGroup,plsqlErrInBracket
213 syn match plsqlParenError "[\])]"
214 syn match plsqlErrInParen contained "[{}]"
215 syn region plsqlBracket transparent start='\[' end=']' contains=ALLBUT,@plsqlParenGroup,plsqlErrInParen
216 syn match plsqlErrInBracket contained "[);{}]"
217endif
218
219" Syntax Synchronizing
220syn sync minlines=10 maxlines=100
221
222" Define the default highlighting.
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200223" Only when an item doesn't have highlighting yet.
224command -nargs=+ HiLink hi def link <args>
Bram Moolenaar071d4272004-06-13 20:20:40 +0000225
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200226HiLink plsqlAttribute Macro
227HiLink plsqlBlockError Error
228HiLink plsqlBooleanLiteral Boolean
229HiLink plsqlCharLiteral Character
230HiLink plsqlComment Comment
231HiLink plsqlCommentL Comment
232HiLink plsqlConditional Conditional
233HiLink plsqlError Error
234HiLink plsqlErrInBracket Error
235HiLink plsqlErrInBlock Error
236HiLink plsqlErrInParen Error
237HiLink plsqlException Function
238HiLink plsqlFloatLiteral Float
239HiLink plsqlFunction Function
240HiLink plsqlGarbage Error
241HiLink plsqlHostIdentifier Label
242HiLink plsqlIdentifier Normal
243HiLink plsqlIntLiteral Number
244HiLink plsqlOperator Operator
245HiLink plsqlParen Normal
246HiLink plsqlParenError Error
247HiLink plsqlSpaceError Error
248HiLink plsqlPseudo PreProc
249HiLink plsqlKeyword Keyword
250HiLink plsqlRepeat Repeat
251HiLink plsqlStorage StorageClass
252HiLink plsqlSQLKeyword Function
253HiLink plsqlStringError Error
254HiLink plsqlStringLiteral String
255HiLink plsqlCommentString String
256HiLink plsqlComment2String String
257HiLink plsqlSymbol Normal
258HiLink plsqlTrigger Function
259HiLink plsqlTypeAttribute StorageClass
260HiLink plsqlTodo Todo
Bram Moolenaar071d4272004-06-13 20:20:40 +0000261
Bram Moolenaar89bcfda2016-08-30 23:26:57 +0200262delcommand HiLink
Bram Moolenaar071d4272004-06-13 20:20:40 +0000263
264let b:current_syntax = "plsql"
265
266" vim: ts=8 sw=2