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 ([email protected]) 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" quit when a syntax file was already loaded 13if exists("b:current_syntax") 14 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. 223" Only when an item doesn't have highlighting yet. 224 225hi def link plsqlAttribute Macro 226hi def link plsqlBlockError Error 227hi def link plsqlBooleanLiteral Boolean 228hi def link plsqlCharLiteral Character 229hi def link plsqlComment Comment 230hi def link plsqlCommentL Comment 231hi def link plsqlConditional Conditional 232hi def link plsqlError Error 233hi def link plsqlErrInBracket Error 234hi def link plsqlErrInBlock Error 235hi def link plsqlErrInParen Error 236hi def link plsqlException Function 237hi def link plsqlFloatLiteral Float 238hi def link plsqlFunction Function 239hi def link plsqlGarbage Error 240hi def link plsqlHostIdentifier Label 241hi def link plsqlIdentifier Normal 242hi def link plsqlIntLiteral Number 243hi def link plsqlOperator Operator 244hi def link plsqlParen Normal 245hi def link plsqlParenError Error 246hi def link plsqlSpaceError Error 247hi def link plsqlPseudo PreProc 248hi def link plsqlKeyword Keyword 249hi def link plsqlRepeat Repeat 250hi def link plsqlStorage StorageClass 251hi def link plsqlSQLKeyword Function 252hi def link plsqlStringError Error 253hi def link plsqlStringLiteral String 254hi def link plsqlCommentString String 255hi def link plsqlComment2String String 256hi def link plsqlSymbol Normal 257hi def link plsqlTrigger Function 258hi def link plsqlTypeAttribute StorageClass 259hi def link plsqlTodo Todo 260 261 262let b:current_syntax = "plsql" 263 264" vim: ts=8 sw=2 265