1" 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 278