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