Built in SQL Functions

:
Character / String Functions:
ASCII FUNCTION..................................................................................................................................................... ....4 ASCIISTR FUNCTION.................................................................................................................................... .............5 CHR FUNCTION................................................................................................................................................... ........5 COMPOSE FUNCTION.......................................................................................................................................... ......5 CONCAT FUNCTION......................................................................................................................................... ..........6 || OPERATOR........................................................................................................................................................ .........6 CONVERT FUNCTION................................................................................................................................ ................7 DECOMPOSE FUNCTION....................................................................................................................... ...................8 DUMP FUNCTION............................................................................................................................................ ............8 INITCAP FUNCTION.................................................................................................................................. .................9 INSTR FUNCTION...................................................................................................................................................... ..9 LENGTH FUNCTION......................................................................................................................................... ........10 LOWER FUNCTION................................................................................................................................................. ..10 LPAD FUNCTION.................................................................................................................................. .....................11 LTRIM FUNCTION............................................................................................................................................ .........11 REPLACE FUNCTION...................................................................................................................................... .........12 RPAD FUNCTION............................................................................................................................................ ...........13 RTRIM FUNCTION................................................................................................................................... .................13 SOUNDEX FUNCTION........................................................................................................................ ......................14 SUBSTR FUNCTION.............................................................................................................................. ....................15 TRANSLATE FUNCTION................................................................................................................................ ..........15 TRIM FUNCTION............................................................................................................................................. ..........16 UPPER FUNCTION.................................................................................................................................................... .17 VSIZE FUNCTION.............................................................................................................................................. ........17 BIN_TO_NUM FUNCTION.................................................................................................................................. ......18 CAST FUNCTION....................................................................................................................................... ................18 CHARTOROWID FUNCTION........................................................................................................... .......................19 FROM_TZ FUNCTION........................................................................................................................ ......................19 HEXTORAW FUNCTION.................................................................................................................... ......................20 NUMTODSINTERVAL FUNCTION.................................................................................................................. ........20 NUMTOYMINTERVAL FUNCTION..................................................................................................... ...................21 TO_CHAR FUNCTION............................................................................................................................................... 21 TO_CLOB FUNCTION..................................................................................................................................... ..........24 TO_DATE FUNCTION......................................................................................................................... ......................24 TO_MULTI_BYTE FUNCTION................................................................................................................................ .26

none
GE Confidential

1

TO_NCLOB FUNCTION.............................................................................................................................. ..............26 TO_NUMBER FUNCTION...................................................................................................................................... ...27 TO_DSINTERVAL FUNCTION................................................................................................................ .................27 TO_SINGLE_BYTE FUNCTION............................................................................................................................ ...28 TO_LOB FUNCTION............................................................................................................................................ ......28 TO_TIMESTAMP FUNCTION............................................................................................................. .....................28 TO_TIMESTAMP_TZ FUNCTION............................................................................................................... ............29 TO_YMINTERVAL FUNCTION........................................................................................................................... .....30 BFILENAME FUNCTION................................................................................................................................. .........31 CARDINALITY FUNCTION (NEW IN ORACLE 10).................................................................................... .........31 CASE STATEMENT........................................................................................................................................ ............32 COALESCE FUNCTION............................................................................................................................... .............34 DECODE FUNCTION......................................................................................................................................... ........34 GROUP_ID FUNCTION.............................................................................................................................. ...............37 NANVL FUNCTION (NEW IN ORACLE 10).............................................................................................. .............37 NVL FUNCTION......................................................................................................................................................... .38 NVL2 FUNCTION................................................................................................................................... ....................39 SYS_CONTEXT FUNCTION...................................................................................................................... ...............40 UID FUNCTION..................................................................................................................................... .....................42 USER FUNCTION........................................................................................................................................ ...............42 USERENV FUNCTION..................................................................................................................................... ..........43 ABS FUNCTION............................................................................................................................................... ...........44 ACOS FUNCTION.................................................................................................................................................. .....44 ASIN FUNCTION....................................................................................................................................... .................45 ATAN FUNCTION.......................................................................................................................................... .............45 ATAN2 FUNCTION....................................................................................................................................... ..............45 AVG FUNCTION..................................................................................................................................... ....................46 BIN_TO_NUM FUNCTION.................................................................................................................................. ......47 BITAND FUNCTION................................................................................................................................................ ...47 CEIL FUNCTION....................................................................................................................................... .................48 CORR FUNCTION......................................................................................................................................... .............48 COS FUNCTION......................................................................................................................................................... .49 COSH FUNCTION............................................................................................................................... .......................49 COVAR_POP FUNCTION........................................................................................................................... ...............49 COVAR_SAMP FUNCTION.............................................................................................................................. .........50 COUNT FUNCTION.................................................................................................................................................... 50 CUME_DIST FUNCTION......................................................................................................................................... ..52 DENSE_RANK FUNCTION.......................................................................................................................... .............53 EXP FUNCTION............................................................................................................................................... ...........54 EXTRACT FUNCTION............................................................................................................................................... 54

none
GE Confidential

2

FLOOR FUNCTION................................................................................................................................................ ....55 GREATEST FUNCTION.......................................................................................................................................... ...55 LEAST FUNCTION.............................................................................................................................................. .......56 LN FUNCTION............................................................................................................................................. ...............56 LOG FUNCTION................................................................................................................................................ .........57 MAX FUNCTION....................................................................................................................................... .................57 MEDIAN FUNCTION (NEW IN ORACLE 10)................................................................................. .......................60 MIN FUNCTION......................................................................................................................................................... .60 MOD FUNCTION............................................................................................................................................ ............61 POWER FUNCTION............................................................................................................................................ .......61 RANK FUNCTION......................................................................................................................................... .............62 REMAINDER FUNCTION (NEW IN ORACLE 10)............................................................................... .................63 ROUND FUNCTION (WITH NUMBERS).................................................................................................... ............63 ROUND FUNCTION (WITH DATES)................................................................................................................ .......64 SIGN FUNCTION............................................................................................................................................ ............65 SIN FUNCTION.............................................................................................................................................. .............65 SINH FUNCTION............................................................................................................................................ ............66 SQRT FUNCTION......................................................................................................................................... ..............66 STDDEV FUNCTION............................................................................................................................................ ......67 SUM FUNCTION................................................................................................................................................ .........67 TAN FUNCTION........................................................................................................................................................ ..69 TANH FUNCTION...................................................................................................................................................... .69 TRUNC FUNCTION (WITH DATES)...................................................................................................... .................70 TRUNC FUNCTION (WITH NUMBERS).......................................................................................... ......................71 VAR_POP FUNCTION.................................................................................................................................... ............71 VAR_SAMP FUNCTION....................................................................................................................................... ......71 VARIANCE FUNCTION.................................................................................................................................. ...........72 ADD_MONTHS FUNCTION................................................................................................................................ ......72 CURRENT_DATE FUNCTION.............................................................................................................................. ....73 CURRENT_TIMESTAMP FUNCTION.................................................................................................................. ...74 TZ_OFFSET FUNCTION.......................................................................................................................... .................74 DBTIMEZONE FUNCTION.................................................................................................................................... ...75 FROM_TZ FUNCTION........................................................................................................................ ......................76 LAST_DAY FUNCTION........................................................................................................................ .....................77 LOCALTIMESTAMP FUNCTION....................................................................................................... .....................77 NEW_TIME FUNCTION.................................................................................................................................... ........78 NEXT_DAY FUNCTION....................................................................................................................................... ......79 ROUND FUNCTION (WITH DATES)................................................................................................................ .......79 SESSIONTIMEZONE FUNCTION........................................................................................................................... .80 MONTHS_BETWEEN FUNCTION.................................................................................................... ......................81

none
GE Confidential

3

SYSTIMESTAMP FUNCTION............................................................................................................................. ......82 TO_CHAR FUNCTION............................................................................................................................................... 83 SYSDATE FUNCTION......................................................................................................................................... .......85 TO_DATE FUNCTION......................................................................................................................... ......................86 TRUNC FUNCTION (WITH DATES)...................................................................................................... .................87 SQLCODE FUNCTION........................................................................................................................ ......................88 SQLERRM FUNCTION....................................................................................................................................... .......89 UID FUNCTION..................................................................................................................................... .....................90 USER FUNCTION........................................................................................................................................ ...............91

1. Character / String Functions:
Ascii Function
In Oracle/PLSQL, the ascii function returns the NUMBER code that represents the specified character. The syntax for the ascii function is: ascii( single_character ) single_character is the specified character to retrieve the NUMBER code for. If more than one character is entered, the function will return the value for the first character and ignore all of the characters after the first.

For example: ascii('t') ascii('T') ascii('T2') would return 116. would return 84. would also return 84.

To view a listing of the ascii values, click here

none
GE Confidential

4

AsciiStr Function
In Oracle/PLSQL, the asciistr function converts a string in any character set to an ASCII string using the database character set. The syntax for the asciistr function is: asciistr( string ) string is a string in any character set that you want converted to an ASCII string in the database character set.

For example: asciistr('A B C Ä Ê') asciistr('A B C Õ Ø') asciistr('A B C Ä Ê Í Õ Ø') would return 'A B C \00C4 \00CA' would return 'A B C \00D5 \00D8' would return 'A B C \00C4 \00CA \00CD \00D5 \00D8'

Chr Function
In Oracle/PLSQL, the chr function is the opposite of the ascii function. It returns the character based on the NUMBER code. The syntax for the chr function is: chr( number_code ) number_code is the NUMBER code used to retrieve the character.

For example: chr(116); chr(84); would return 't'. would return 'T'.

To view a listing of the ascii values, click here.

Compose Function
In Oracle/PLSQL, the compose function returns a Unicode string. The syntax for the compose function is:

none
GE Confidential

5

compose( string ) string is the input value used to create the Unicode string. It can be a char, varchar2, nchar, nvarchar2, clob, or nclob.

Below is a listing of unistring values that can be combined with other characters in the compose function. Unistring Value unistr('\0300') unistr('\0301') unistr('\0302') unistr('\0303') unistr('\0308') Resulting character grave accent ( ` ) acute accent ( ´ ) circumflex ( ^ ) tilde ( ~ ) umlaut ( ¨ )

For example: compose('o' || unistr('\0308') ) compose('a' || unistr('\0302') ) compose('e' || unistr('\0301') ) would return ö would return â would return é

Concat Function
In Oracle/PLSQL, the concat function allows you to concatenate two strings together. The syntax for the concat function is: concat( string1, string2 ) string1 is the first string to concatenate. string2 is the second string to concatenate.

For example: concat('Tech on', ' the Net'); concat('a', 'b') would return 'Tech on the Net'. would return 'ab'.

|| Operator
In Oracle/PLSQL, the || operator allows you to concatenate 2 or more strings together.

none
GE Confidential

6

The syntax for the || operator is: string1 || string2 || string_n string1 is the first string to concatenate. string2 is the second string to concatenate. string_n is the nth string to concatenate.

For example: 'Tech on' || ' the Net' 'a' || 'b' || 'c' || 'd' would return 'Tech on the Net'. would return 'abcd'.

Convert Function
In Oracle/PLSQL, the convert function converts a string from one character set to another. The syntax of the convert function is: convert( string1 , char_set_to , [ char_set_from ] ) string1 is the string to be converted. char_set_to is the character set to convert to. char_set_from is the character set to convert from.

Character sets include: Character Set US7ASCII WE8DEC WE8HP F7DEC WE8EBCDIC500 WE8PC850 WE8ISO8859P1 Description US 7-bit ASCII character set West European 8-bit character set HP West European Laserjet 8-bit character set DEC French 7-bit character set IBM West European EBCDIC Code Page 500 IBM PC Code Page 850 ISO 8859-1 West European 8-bit character set

none
GE Confidential

7

For example: convert('A B C D E Ä Ê Í Õ Ø', 'US7ASCII', 'WE8ISO8859P1') would return 'A B C D E A E I ? ?'

Decompose Function
In Oracle/PLSQL, the decompose function accepts a string and returns a Unicode string. The syntax for the decompose function is: decompose( string ) string is the string that will be decomposed.

For example: decompose('Très bien') decompose('é') decompose('olé') would return 'Tre`s bien' would return 'e´' would return 'ole´'

Dump Function
In Oracle/PLSQL, the dump function returns a varchar2 value that includes the datatype code, the length in bytes, and the internal representation of the expression. The syntax for the dump function is: dump( expression, [return_format], [start_position], [length] ) expression is the expression to analyze. return_format is optional. It determines the format of the return value. This parameter can be any of the following values: Value 8 10 16 17 1008 1010 1016 1017 octal notation decimal notation hexadecimal notation single characters octal notation with the character set name decimal notation with the character set name hexadecimal notation with the character set name single characters with the character set name Explanation

none
GE Confidential

8

start_position and length are optional parameters. They determines which portion of the internal representation to display. If these parameters are omitted, the dump function will display the entire internal representation in decimal notation.

For example: dump('Tech') dump('Tech', 10) dump('Tech', 16) dump('Tech', 1016) dump('Tech', 1017) would return 'Typ=96 Len=4: 84,101,99,104' would return 'Typ=96 Len=4: 84,101,99,104' would return 'Typ=96 Len=4: 54,65,63,68' would return 'Typ=96 Len=4 CharacterSet=US7ASCII: 54,65,63,68' would return 'Typ=96 Len=4 CharacterSet=US7ASCII: T,e,c,h'

Initcap Function
In Oracle/PLSQL, the initcap function sets the first character in each word to uppercase and the rest to lowercase. The syntax for the initcap function is: initcap( string1 ) string1 is the string argument whose first character in each word will be converted to uppercase and all remaining characters converted to lowercase.

For example: initcap('tech on the net'); would return 'Tech On The Net'

initcap('GEORGE BURNS'); would return 'George Burns'

Instr Function
In Oracle/PLSQL, the instr function returns the location of a substring in a string. The syntax for the instr Oracle function is: instr( string1, string2, [ start_position ], [ nth_appearance ] ) string1 is the string to search. string2 is the substring to search for in string1. start_position is the position in string1 where the search will start. This argument is optional. If omitted, it defaults to 1. The first position in the string is 1. If the start_position is negative, the function counts back start_position number of characters from the end of string1 and then searches towards the beginning of string1.

none
GE Confidential

9

nth_appearance is the nth appearance of string2. This is optional. If omitted, it defaults to 1.

Note: If string2 is not found in string1, then the instr Oracle function will return 0.

For example: instr('Tech on the net', 'e') instr('Tech on the net', 'e', 1, 1) instr('Tech on the net', 'e', 1, 2) instr('Tech on the net', 'e', 1, 3) instr('Tech on the net', 'e', -3, 2) would return 2; the first occurrence of 'e' would return 2; the first occurrence of 'e' would return 11; the second occurrence of 'e' would return 14; the third occurrence of 'e' would return 2.

Length Function
In Oracle/PLSQL, the length function returns the length of the specified string. The syntax for the length function is: length( string1 ) string1 is the string to return the length for. If string1 is NULL, then the function returns NULL.

For example: length(NULL) length('') length('Tech on the Net') length('Tech on the Net ') would return NULL. would return NULL. would return 15. would return 16.

Lower Function
In Oracle/PLSQL, the lower function converts all letters in the specified string to lowercase. If there are characters in the string that are not letters, they are unaffected by this function. The syntax for the lower function is: lower( string1 ) string1 is the string to convert to lowercase.

none
GE Confidential

10

For example: lower('Tech on the Net'); lower('GEORGE BURNS 123 '); would return 'tech on the net' would return 'george burns 123 '

Lpad Function
In Oracle/PLSQL, the lpad function pads the left-side of a string with a specific set of characters. The syntax for the lpad function is: lpad( string1, padded_length, [ pad_string ] ) string1 is the string to pad characters to (the left-hand side). padded_length is the number of characters to return. If the padded_length is smaller than the original string, the lpad function will truncate the string to the size of padded_length. pad_string is optional. This is the string that will be padded to the left-hand side of string1. If this parameter is omitted, the lpad function will pad spaces to the left-side of string1.

For example: lpad('tech', 7); lpad('tech', 2); lpad('tech', 8, '0'); lpad('tech on the net', 15, 'z'); lpad('tech on the net', 16, 'z'); would return ' tech' would return 'te' would return '0000tech' would return 'tech on the net' would return 'ztech on the net'

Ltrim Function
In Oracle/PLSQL, the ltrim function removes all specified characters from the left-hand side of a string. The syntax for the ltrim function is: ltrim( string1, [ trim_string ] ) string1 is the string to trim the characters from the left-hand side. trim_string is the string that will be removed from the left-hand side of string1. If this parameter is omitted, the ltrim function will remove all leading spaces from string1.

none
GE Confidential

11

For example: ltrim(' tech'); ltrim(' tech', ' '); ltrim('000123', '0'); ltrim('123123Tech', '123'); ltrim('123123Tech123', '123'); ltrim('xyxzyyyTech', 'xyz'); ltrim('6372Tech', '0123456789'); would return 'tech' would return 'tech' would return '123' would return 'Tech' would return 'Tech123' would return 'Tech' would return 'Tech'

The ltrim function may appear to remove patterns, but this is not the case as demonstrated in the following example. ltrim('xyxzyyyTech', 'xyz'); would return 'Tech'

It actually removes the individual occurrences of 'x', 'y', and 'z', as opposed to the pattern of 'xyz'.

The ltrim function can also be used to remove all leading numbers as demonstrated in the next example. ltrim( '6372Tech', '0123456789'); would return 'Tech'

In this example, every number combination from 0 to 9 has been listed in the trim_string parameter. By doing this, it does not matter the order that the numbers appear in string1, all leading numbers will be removed by the ltrim function.

Replace Function
In Oracle/PLSQL, the replace function replaces a sequence of characters in a string with another set of characters. The syntax for the replace function is: replace( string1, string_to_replace, [ replacement_string ] ) string1 is the string to replace a sequence of characters with another set of characters. string_to_replace is the string that will be searched for in string1. replacement_string is optional. All occurrences of string_to_replace will be replaced with replacement_string in string1. If the replacement_string parameter is omitted, the replace function simply removes all occurrences of string_to_replace, and returns the resulting string. For example: replace('123123tech', '123'); replace('123tech123', '123'); would return 'tech' would return 'tech'

none
GE Confidential

12

replace('222tech, '2', '3'); replace('0000123', '0'); replace('0000123', '0', ' ');

would return '333tech' would return '123' would return ' 123'

Rpad Function
In Oracle/PLSQL, the rpad function pads the right-side of a string with a specific set of characters. The syntax for the rpad function is: rpad( string1, padded_length, [ pad_string ] ) string1 is the string to pad characters to (the right-hand side). padded_length is the number of characters to return. If the padded_length is smaller than the original string, the rpad function will truncate the string to the size of padded_length. pad_string is optional. This is the string that will be padded to the right-hand side of string1. If this parameter is omitted, the rpad function will pad spaces to the right-side of string1.

For example: rpad('tech', 7); rpad('tech', 2); rpad('tech', 8, '0'); rpad('tech on the net', 15, 'z'); rpad('tech on the net', 16, 'z'); would return 'tech ' would return 'te' would return 'tech0000' would return 'tech on the net' would return 'tech on the netz'

Rtrim Function
In Oracle/PLSQL, the rtrim function removes all specified characters from the right-hand side of a string. The syntax for the rtrim function is: rtrim( string1, [ trim_string ] ) string1 is the string to trim the characters from the right-hand side. trim_string is the string that will be removed from the right-hand side of string1. If this parameter is omitted, the rtrim function will remove all trailing spaces from string1.

For example: rtrim('tech '); would return 'tech'

none
GE Confidential

13

rtrim('tech ', ' '); rtrim('123000', '0'); rtrim('Tech123123', '123'); rtrim('123Tech123', '123'); rtrim('Techxyxzyyy', 'xyz'); rtrim('Tech6372', '0123456789');

would return 'tech' would return '123' would return 'Tech' would return '123Tech' would return 'Tech' would return 'Tech'

The rtrim function may appear to remove patterns, but this is not the case as demonstrated in the following example. rtrim('Techxyxzyyy', 'xyz'); would return 'Tech'

It actually removes the individual occurrences of 'x', 'y', and 'z', as opposed to the pattern of 'xyz'.

The rtrim function can also be used to remove all trailing numbers as demonstrated in the next example. rtrim('Tech6372', '0123456789'); would return 'Tech'

In this example, every number combination from 0 to 9 has been listed in the trim_string parameter. By doing this, it does not matter the order that the numbers appear in string1, all trailing numbers will be removed by the rtrim function.

Soundex Function
In Oracle/PLSQL, the soundex function returns a phonetic representation (the way it sounds) of a string. The syntax for the soundex function is: soundex( string1 ) string1 is the string whose phonetic value will be returned.

The Soundex algorithm is as follows:

1. 2. 3.

The soundex return value will always begin with the first letter of string1. The soundex function uses only the first 5 consonants to determine the NUMERIC portion of the return value, except if the first letter of string1 is a vowel. The soundex function is not case-sensitive. What this means is that both uppercase and lowercase characters will generate the same soundex return value.

none
GE Confidential

14

For example: soundex('tech on the net'); soundex('TECH ON THE NET'); soundex('apples'); soundex('apples are great'); soundex('applus'); would return 'T253' would return 'T253' would return 'A142' would return 'A142' would return 'A142'

Substr Function
In Oracle/PLSQL, the substr functions allows you to extract a substring from a string. The syntax for the substr function is: substr( string, start_position, [ length ] ) string is the source string. start_position is the position for extraction. The first position in the string is always 1. length is optional. It is the number of characters to extract. If this parameter is omitted, substr will return the entire string.

Note: If start_position is 0, then substr treats start_position as 1 (ie: the first position in the string). If start_position is a positive number, then substr starts from the beginning of the string. If start_position is a negative number, then substr starts from the end of the string and counts backwards. If length is a negative number, then substr will return a NULL value.

For example: substr('This is a test', 6, 2) substr('This is a test', 6) substr('TechOnTheNet', 1, 4) substr('TechOnTheNet', -3, 3) substr('TechOnTheNet', -6, 3) substr('TechOnTheNet', -8, 2) would return 'is' would return 'is a test' would return 'Tech' would return 'Net' would return 'The' would return 'On'

Translate Function 15
GE Confidential

none

In Oracle/PLSQL, the translate function replaces a sequence of characters in a string with another set of characters. However, it replaces a single character at a time. For example, it will replace the 1st character in the string_to_replace with the 1st character in the replacement_string. Then it will replace the 2nd character in the string_to_replace with the 2nd character in the replacement_string, and so on. The syntax for the translate function is: translate( string1, string_to_replace, replacement_string ) string1 is the string to replace a sequence of characters with another set of characters. string_to_replace is the string that will be searched for in string1. replacement_string - All characters in the string_to_replace will be replaced with the corresponding character in the replacement_string.

For example: translate('1tech23', '123', '456); translate('222tech, '2ec', '3it'); would return '4tech56' would return '333tith'

Trim Function
In Oracle/PLSQL, the trim function removes all specified characters either from the beginning or the ending of a string. The syntax for the trim function is: trim( [ leading | trailing | both [ trim_character ] ] string1 ) leading - remove trim_string from the front of string1. trailing - remove trim_string from the end of string1. both - remove trim_string from the front and end of string1. If none of these are chosen (ie: leading, trailing, both), the trim function will remove trim_string from both the front and end of string1.

trim_character is the character that will be removed from string1. If this parameter is omitted, the trim function will remove all leading and trailing spaces from string1. string1 is the string to trim.

For example:

none
GE Confidential

16

trim(' tech ') trim(' ' from ' tech ') trim(leading '0' from '000123') trim(trailing '1' from 'Tech1') trim(both '1' from '123Tech111')

would return 'tech' would return 'tech' would return '123' would return 'Tech' would return '23Tech'

Upper Function
In Oracle/PLSQL, the upper function converts all letters in the specified string to uppercase. If there are characters in the string that are not letters, they are unaffected by this function. The syntax for the upper function is: upper( string1 ) string1 is the string to convert to uppercase.

For example: upper('Tech on the Net'); upper('george burns 123 '); would return 'TECH ON THE NET' would return 'GEORGE BURNS 123 '

VSize Function
In Oracle/PLSQL, the vsize function returns the number of bytes in the internal representation of an expression. The syntax for the vsize function is: vsize( expression ) expression is the string to evaluate.

For example: vsize('Tech on the net') vsize('Tech on the net ') vsize(null) vsize('') vsize(' ') would return 15 would return 16 would return <null> would return <null> would return 1

2. Conversion Functions:
none
GE Confidential

17

Bin_To_Num Function
In Oracle/PLSQL, the bin_to_num function converts a bit vector to a number. The syntax for the bin_to_num function is: bin_to_num( expr1, expr2, ... expr_n) expr1, expr2, ... expr_n must be either 0 or 1 values. They represent bits in a bit vector.

For example: bin_to_num(1) bin_to_num(1,0) bin_to_num(1,1) bin_to_num(1,1,1,0) bin_to_num(1,1,1,1) would return 1 would return 2 would return 3 would return 14 would return 15

Cast Function
In Oracle/PLSQL, the cast function converts one datatype to another. The syntax for the cast function is: cast ( { expr | ( subquery ) | MULTISET ( subquery ) } AS type_name )

The following casts are allowed: TO char, varchar2 char, varchar2 number datetime / interval raw X X X X number X X X X datetime / interval X FROM raw X rowid, urowid X nchar, nvarchar2

none
GE Confidential

18

rowid, urowid nchar, nvarchar2

X X X X

X X X

For example: select cast( '22-Aug-2003' AS varchar2(30) ) from dual; This would convert the date (ie: 22-Aug-2003) into a varchar2(30) value.

CharToRowid Function
In Oracle/PLSQL, the chartorowid function converts a char, varchar2, nchar, or nvarchar2 to a rowid. The syntax for the chartorowid function is: chartorowid( value1 ) value1 is the value to convert to a rowid. The format of the rowid is: BBBBBBB.RRRR.FFFFF where: BBBBBBB is the block in the database file; RRRR is the row in the block; FFFFF is the database file.

For example: select * from suppliers where rowid = chartorowid('AAABoqAADAAAAwPAAA'); This would return a unique row from the suppliers table.

From_Tz function
In Oracle/PLSQL, the from_tz function converts a TIMESTAMP value (given a TIME ZONE) to a TIMESTAMP WITH TIME ZONE value. The syntax for the from_tz function is: from_tz( timestamp_value, time_zone_value )

none
GE Confidential

19

timestamp_value is the value to convert to a TIMESTAMP WITH TIME ZONE value. time_zone_value is the time zone used to convert timestamp_value to a TIMESTAMP WITH TIME ZONE value.

For example: If you executed the following SQL statement: select from_tz(TIMESTAMP '2005-09-11 01:50:42', '5:00') from dual; You would now get the following result: 11-Sep-05 01.50.42.000000 AM +05:00

If you executed the same SQL statement, but set the time zone to '-7:00' as follows: select from_tz(TIMESTAMP '2005-09-11 01:50:42', '-7:00') from dual; You would now get the following result: 11-Sep-05 01.50.42.000000 AM -07:00

HexToRaw Function
In Oracle/PLSQL, the hextoraw function converts a hexadecimal value into a raw value. The syntax for the hextoraw function is: hextoraw( char ) char is the hexademical value to convert to a raw value.

For example: hextoraw('45D') hextoraw('7E') would return '045D' as a raw value would return '7E' as a raw value

NumToDSInterval Function
In Oracle/PLSQL, the numtodsinterval function converts a number to an INTERVAL DAY TO SECOND literal.

none
GE Confidential

20

The syntax for the numtodsinterval function is: numtodsinterval( number, expression ) number is the number to convert to an interval. expression is the unit. It must be one of the following values: DAY, HOUR, MINUTE, or SECOND.

For example: numtodsinterval(150, 'DAY') numtodsinterval(1500, 'HOUR') numtodsinterval(15000, 'MINUTE') numtodsinterval(150000, 'SECOND') would return '+000000150' would return '+000000062' would return '+000000010' would return '+000000001'

NumToYMInterval Function
In Oracle/PLSQL, the numtoyminterval function converts a number to an INTERVAL YEAR TO MONTH literal. The syntax for the numtoyminterval function is: numtoyminterval( number, expression ) number is the number to convert to an interval. expression is the unit. It must be one of the following values: YEAR or MONTH.

For example: numtoyminterval(100000000, 'MONTH') numtoyminterval(100000, 'YEAR') would return '+0083' would return '+0001'

To_Char Function
In Oracle/PLSQL, the to_char function converts a number or date to a string. The syntax for the to_char function is: to_char( value, [ format_mask ], [ nls_language ] ) value can either be a number or date that will be converted to a string. format_mask is optional. This is the format that will be used to convert value to a string.

none
GE Confidential

21

nls_language is optional. This is the nls language used to convert value to a string.

Examples - Numbers
The following are number examples for the to_char function. to_char(1210.73, '9999.9') to_char(1210.73, '9,999.99') to_char(1210.73, '$9,999.00') to_char(21, '000099') would return '1210.7' would return '1,210.73' would return '$1,210.73' would return '000021'

Examples - Dates
The following is a list of valid parameters when the to_char function is used to convert a date to a string. These parameters can be used in many combinations. Parameter YEAR YYYY YYY YY Y IYY IY I IYYY Q MM MON MONTH RM WW W IW D DAY DD DDD Year, spelled out 4-digit year Last 3, 2, or 1 digit(s) of year. Explanation

Last 3, 2, or 1 digit(s) of ISO year.

4-digit year based on the ISO standard Quarter of year (1, 2, 3, 4; JAN-MAR = 1). Month (01-12; JAN = 01). Abbreviated name of month. Name of month, padded with blanks to length of 9 characters. Roman numeral month (I-XII; JAN = I). Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh. Week of year (1-52 or 1-53) based on the ISO standard. Day of week (1-7). Name of day. Day of month (1-31). Day of year (1-366).

none
GE Confidential

22

DY J HH HH12 HH24 MI SS SSSSS FF

Abbreviated name of day. Julian day; the number of days since January 1, 4712 BC. Hour of day (1-12). Hour of day (1-12). Hour of day (0-23). Minute (0-59). Second (0-59). Seconds past midnight (0-86399). Fractional seconds.

The following are date examples for the to_char function. to_char(sysdate, 'yyyy/mm/dd'); to_char(sysdate, 'Month DD, YYYY'); to_char(sysdate, 'FMMonth DD, YYYY'); to_char(sysdate, 'MON DDth, YYYY'); to_char(sysdate, 'FMMON DDth, YYYY'); to_char(sysdate, 'FMMon ddth, YYYY'); would return '2003/07/09' would return 'July 09, 2003' would return 'July 9, 2003' would return 'JUL 09TH, 2003' would return 'JUL 9TH, 2003' would return 'Jul 9th, 2003'

You will notice that in some examples, the format_mask parameter begins with "FM". This means that zeros and blanks are suppressed. This can be seen in the examples below. to_char(sysdate, 'FMMonth DD, YYYY'); to_char(sysdate, 'FMMON DDth, YYYY'); to_char(sysdate, 'FMMon ddth, YYYY'); would return 'July 9, 2003' would return 'JUL 9TH, 2003' would return 'Jul 9th, 2003'

The zeros have been suppressed so that the day component shows as "9" as opposed to "09".

Frequently Asked Questions
Question: Why doesn't this sort the day's of the week in order? select ename, hiredate, to_char((hiredate),'fmDay') "Day" from emp order by "Day"; Answer: The fmDay parameter will return the name of the Day and not the numeric value of the day. Try the following:

none
GE Confidential

23

select ename, hiredate, to_char((hiredate),'fmDD') "Day" from emp order by "Day";

To_Clob Function
In Oracle/PLSQL, the to_clob function converts a LOB value from the national character set to the database character set. The syntax for the to_clob function is: to_clob( expression ) expression can either be a lob_column, char, varchar2, nchar, nvarchar2, clob or nclob value.

For example: select to_clob(nclob_column) from suppliers; This example would convert the value in the field called nclob_column to a CLOB value.

To_Date Function
In Oracle/PLSQL, the to_date function converts a string to a date. The syntax for the to_date function is: to_date( string1, [ format_mask ], [ nls_language ] ) string1 is the string that will be converted to a date. format_mask is optional. This is the format that will be used to convert string1 to a date. nls_language is optional. This is the nls language used to convert string1 to a date.

The following is a list of options for the format_mask parameter. These parameters can be used in many combinations. Parameter YEAR YYYY Year, spelled out 4-digit year Explanation

none
GE Confidential

24

YYY YY Y IYY IY I IYYY RRRR Q MM MON MONTH RM WW W IW D DAY DD DDD DY J HH HH12 HH24 MI SS SSSSS FF

Last 3, 2, or 1 digit(s) of year.

Last 3, 2, or 1 digit(s) of ISO year. 4-digit year based on the ISO standard Accepts a 2-digit year and returns a 4-digit year. A value between 0-49 will return a 20xx year. A value between 50-99 will return a 19xx year. Quarter of year (1, 2, 3, 4; JAN-MAR = 1). Month (01-12; JAN = 01). Abbreviated name of month. Name of month, padded with blanks to length of 9 characters. Roman numeral month (I-XII; JAN = I). Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh. Week of year (1-52 or 1-53) based on the ISO standard. Day of week (1-7). Name of day. Day of month (1-31). Day of year (1-366). Abbreviated name of day. Julian day; the number of days since January 1, 4712 BC. Hour of day (1-12). Hour of day (1-12). Hour of day (0-23). Minute (0-59). Second (0-59). Seconds past midnight (0-86399). Fractional seconds. Use a value from 1 to 9 after FF to indicate the number of digits in the fractional seconds. For example, 'FF4'.

AM, A.M., PM, or P.M. Meridian indicator AD or A.D BC or B.C. TZD TZH AD indicator BC indicator Daylight savings information. For example, 'PST' Time zone hour.

none
GE Confidential

25

TZM TZR

Time zone minute. Time zone region.

For example: to_date('2003/07/09', 'yyyy/mm/dd') to_date('070903', 'MMDDYY') to_date('20020315', 'yyyymmdd') would return a date value of July 9, 2003. would return a date value of July 9, 2003. would return a date value of Mar 15, 2002.

To_Multi_Byte Function
In Oracle/PLSQL, the to_multi_byte function returns a character value with all of the single-byte characters converted to multibyte characters. To use this function, your database character set contains both singlebyte and multibyte characters. The syntax for the to_multi_byte function is: to_multi_byte( char ) char can be a char, varchar2, nchar, or nvarchar2 value. This function will return its result in the same character set as char.

For example: select to_multi_byte('Tech on the net') from dual; The SQL statement above would return a multibyte character value.

To_NClob Function
In Oracle/PLSQL, the to_nclob function converts a LOB value to a NCLOB value. The syntax for the to_nclob function is: to_nclob( expression ) expression can be a char, varchar2, nchar, nvarchar2, clob or nclob value.

For example: select to_nclob(lob_column) from suppliers;

none
GE Confidential

26

This example would convert the value in the field called lob_column to an NCLOB value.

To_Number Function
In Oracle/PLSQL, the to_number function converts a string to a number. The syntax for the to_number function is: to_number( string1, [ format_mask ], [ nls_language ] ) string1 is the string that will be converted to a number. format_mask is optional. This is the format that will be used to convert string1 to a number. nls_language is optional. This is the nls language used to convert string1 to a number.

For example: to_number('1210.73', '9999.99') to_number('546', '999') to_number('23', '99') would return the number 1210.73 would return the number 546 would return the number 23

Since the format_mask and nls_language parameters are optional, you can simply convert a text string to a numeric value as follows: to_number('1210.73'') would return the number 1210.73

To_DSInterval Function
In Oracle/PLSQL, the to_dsinterval function converts a string to an INTERVAL DAY TO SECOND type. The syntax for the to_dsinterval function is: to_dsinterval( character [ nls_parameter ] ) character is the value to convert to an INTERVAL DAY TO SECOND type. It can be a char, varchar2, nchar, or nvarchar2 value. nls_parameter is a decimal character and group separator value.

For example: to_dsinterval('150 08:30:00') would return '+000000150'

none
GE Confidential

27

to_dsinterval('80 12:30:00') to_dsinterval('95 18:30:00')

would return '+000000080' would return '+000000095'

To_Single_Byte Function
In Oracle/PLSQL, the to_single_byte function returns a character value with all of the multibyte characters converted to single-byte characters. To use this function, your database character set contains both singlebyte and multibyte characters. The syntax for the to_single_byte function is: to_single_byte( char ) char can be a char, varchar2, nchar, or nvarchar2 value. This function will return its result in the same character set as char.

For example: select to_single_byte('Tech on the net') from dual; The SQL statement above would return a single-byte character value.

To_Lob Function
In Oracle/PLSQL, the to_lob function converts LONG or LONG RAW values to LOB values. The syntax for the to_lob function is: to_lob( long_column ) long_column can be a LONG or LONG RAW value.

For example: insert into companies (lob_column) select to_lob(long_column) from suppliers; This example would convert the value in the field called long_column to a LOB value.

To_Timestamp Function
In Oracle/PLSQL, the to_timestamp function converts a string to a timestamp.

none
GE Confidential

28

The syntax for the to_timestamp function is: to_timestamp( string1, [ format_mask ] [ 'nlsparam' ] ) string1 is the string that will be converted to a timestamp. format_mask is optional. This is the format that will be used to convert string1 to a timestamp.

The following is a list of options for the format_mask parameter. These parameters can be used in many combinations. Parameter YYYY MM MON MONTH DD HH HH12 HH24 MI SS 4-digit year Month (01-12; JAN = 01). Abbreviated name of month. Name of month, padded with blanks to length of 9 characters. Day of month (1-31). Hour of day (1-12). Hour of day (1-12). Hour of day (0-23). Minute (0-59). Second (0-59). Explanation

For example: to_timestamp('2003/12/13 10:13:18', 'YYYY/MM/DD HH:MI:SS') would return '13-DEC-03 10.13.18.000000000 AM' as a timestamp value.

to_timestamp('2003/DEC/13 10:13:18', 'YYYY/MON/DD HH:MI:SS') would also return '13-DEC-03 10.13.18.000000000 AM' as a timestamp value.

To_Timestamp_Tz Function
In Oracle/PLSQL, the to_timestamp_tz function converts a string to a timestamp with time zone. The syntax for the to_timestamp_tz function is: to_timestamp_tz( string1 , [ format_mask ] [ 'nlsparam' ] )

none
GE Confidential

29

string1 is the string that will be converted to a timestamp with time zone. format_mask is optional. This is the format that will be used to convert string1 to a timestamp with time zone.

The following is a list of options for the format_mask parameter These parameters can be used in many combinations. Parameter YYYY MM MON MONTH DD HH HH12 HH24 MI SS TZM TZH 4-digit year Month (01-12; JAN = 01). Abbreviated name of month. Name of month, padded with blanks to length of 9 characters. Day of month (1-31). Hour of day (1-12). Hour of day (1-12). Hour of day (0-23). Minute (0-59). Second (0-59). Time zone minute. Time zone hour. Explanation

For example: to_timestamp_tz('2003/12/13 10:13:18 -8:00', 'YYYY/MM/DD HH:MI:SS TZH:TZM') would return '13-DEC-03 10.13.18.000000000 AM -08:00' as a timestamp with time zone value.

to_timestamp_tz('2003/DEC/13 10:13:18 -8:00', 'YYYY/MON/DD HH:MI:SS TZH:TZM') would also return '13-DEC-03 10.13.18.000000000 AM -08:00' as a timestamp with time zone value.

To_YMInterval Function
In Oracle/PLSQL, the to_yminterval function converts a string to an INTERVAL YEAR TO MONTH type. The syntax for the to_yminterval function is: to_yminterval( character ) character is the value to convert to an INTERVAL YEAR TO MONTH type. It can be a char, varchar2, nchar, or nvarchar2 value.

none
GE Confidential

30

For example: to_yminterval('03-11') to_yminterval('01-05') to_yminterval('00-01') would return 3 years 11 months as an INTERVAL YEAR TO MONTH type would return 1 year 5 months as an INTERVAL YEAR TO MONTH type would return 0 years 1 month as an INTERVAL YEAR TO MONTH type

The to_yminterval function is most commonly used to add an interval to a date field. For example, you may wish to add 1 year and 5 months to an order date. select order_date, order_date + to_yminterval('01-05') from orders; This SQL statement would return the order date, as well as the order date plus 1 year and 5 months.

3. Advanced Functions:
BFilename Function
In Oracle/PLSQL, the bfilename function returns a BFILE locator for a physical LOB binary file. The syntax for the bfilename function is: bfilename( 'directory', 'filename' ) directory is a directory object that serves as an alias for the full path to where the file is located on the file server. filename is the name of the file on the file server.

For example: First, we need to create a directory object called exampleDir that points to /example/totn on the file server. CREATE DIRECTORY exampleDir AS '/example/totn'; Then we can use the exampleDir directory object in the bfilename function as follows: SELECT bfilename('exampleDir', 'totn_logo.jpg') FROM dual;

Cardinality Function (NEW in Oracle 10)

none
GE Confidential

31

In Oracle/PLSQL, the cardinality function returns the number of elements in a nested table. The syntax for the cardinality function is: cardinality( nested table column ) nested table column is the column in the nested table that you wish to return the cardinality for.

Note: If the nested table is empty, the cardinality function will return NULL. If the nested table is a null collection, the cardinality function will return NULL.

For example: select supplier_id, cardinality(location) from suppliers;

Case Statement
In Oracle 9i, you can use the case statement within an SQL statement. It has the functionality of an IFTHEN-ELSE statement. The syntax for the case statement is: CASE expression WHEN condition_1 THEN result_1 WHEN condition_2 THEN result_2 ... WHEN condition_n THEN result_n ELSE result END expression is the value that you are comparing to the list of conditions. (ie: condition_1, condition_2, ... condition_n) condition_1 to condition_n must all be the same datatype. Conditions are evaluated in the order listed. Once a condition is found to be true, the case statement will return the result and not evaluate the conditions any further. result_1 to result_n must all be the same datatype. This is the value returned once a condition is found to be true.

Note:

none
GE Confidential

32

If no condition is found to be true, then the case statement will return the value in the ELSE clause. If the ELSE clause is omitted and no condition is found to be true, then the case statement will return NULL. You can have up to 255 comparisons in a case statement. Each WHEN ... THEN clause is considered 2 comparisons.

For Example: You could use the case statement in an SQL statement as follows: select table_name, CASE owner WHEN 'SYS' THEN 'The owner is SYS' WHEN 'SYSTEM' THEN 'The owner is SYSTEM' ELSE 'The owner is another value' END from all_tables;

The above case statement is equivalent to the following IF-THEN-ELSE statement: IF owner = 'SYS' THEN result := 'The owner is SYS'; ELSIF owner = 'SYSTEM' THEN result := 'The owner is SYSTEM''; ELSE result := 'The owner is another value'; END IF;

The case statement will compare each owner value, one by one.

One thing to note is that the ELSE clause within the case statement is optional. You could have omitted it. Let's take a look at the SQL statement above with the ELSE clause omitted. Your SQL statement would look as follows: select table_name, CASE owner WHEN 'SYS' THEN 'The owner is SYS' WHEN 'SYSTEM' THEN 'The owner is SYSTEM' END from all_tables; With the ELSE clause omitted, if no condition was found to be true, the case statement would return NULL.

none
GE Confidential

33

Coalesce Function
In Oracle/PLSQL, the coalesce function returns the first non-null expression in the list. If all expressions evaluate to null, then the coalesce function will return null. The syntax for the coalesce function is: coalesce( expr1, expr2, ... expr_n )

For Example: You could use the coalesce function in an SQL statement as follows: SELECT coalesce( address1, address2, address3 ) result FROM suppliers;

The above coalesce statement is equivalent to the following IF-THEN-ELSE statement: IF address1 is not null THEN result := address1; ELSIF address2 is not null THEN result := address2; ELSIF address3 is not null THEN result := address3; ELSE result := null; END IF;

The coalesce function will compare each value, one by one.

Decode Function
In Oracle/PLSQL, the decode function has the functionality of an IF-THEN-ELSE statement. The syntax for the decode function is: decode( expression , search , result [, search , result]... [, default] ) expression is the value to compare. search is the value that is compared against expression.

none
GE Confidential

34

result is the value returned, if expression is equal to search. default is optional. If no matches are found, the decode will return default. If default is omitted, then the decode statement will return null (if no matches are found).

For Example: You could use the decode function in an SQL statement as follows: SELECT supplier_name, decode(supplier_id, 10000, 'IBM', 10001, 'Microsoft', 10002, 'Hewlett Packard', 'Gateway') result FROM suppliers;

The above decode statement is equivalent to the following IF-THEN-ELSE statement: IF supplier_id = 10000 THEN result := 'IBM'; ELSIF supplier_id = 10001 THEN result := 'Microsoft'; ELSIF supplier_id = 10002 THEN result := 'Hewlett Packard'; ELSE result := 'Gateway'; END IF;

The decode function will compare each supplier_id value, one by one.

Frequently Asked Questions
Question: One of our viewers wanted to know how to use the decode function to compare two dates (ie: date1 and date2), where if date1 > date2, the decode function should return date2. Otherwise, the decode function should return date1. Answer: To accomplish this, use the decode function as follows: decode((date1 - date2) - abs(date1 - date2), 0, date2, date1) The formula below would equal 0, if date1 is greater than date2:

none
GE Confidential

35

(date1 - date2) - abs(date1 - date2)

Question: I would like to know if it's possible to use decode for ranges of numbers, ie 1-10 = 'category 1', 11-20 = 'category 2', rather than having to individually decode each number. Answer: Unfortunately, you can not use the decode for ranges of numbers. However, you can try to create a formula that will evaluate to one number for a given range, and another number for the next range, and so on. For example: SELECT supplier_id, decode(trunc ((supplier_id - 1) / 10),

0, 1, 2,

'category 1', 'category 2', 'category 3', 'unknown') result

FROM suppliers; In this example, based on the formula: trunc ((supplier_id - 1) / 10 The formula will evaluate to 0, if the supplier_id is between 1 and 10. The formula will evaluate to 1, if the supplier_id is between 11 and 20. The formula will evaluate to 2, if the supplier_id is between 21 and 30. and so on...

Question: I need to write a decode statement that will return the following: If yrs_of_service < 1 then return 0.04 If yrs_of_service >= 1 and < 5 then return 0.04 If yrs_of_service > 5 then return 0.06 How can I do this? Answer: You will need to create a formula that will evaluate to a single number for each one of your ranges. For example: SELECT emp_name, decode(trunc (( yrs_of_service + 3) / 4), FROM employees; Helpful Tip: One of our viewers suggested combining the SIGN function with the DECODE function as follows: The date example above could be modified as follows:

0, 1,

0.04, 0.04, 0.06) as perc_value

none
GE Confidential

36

DECODE(SIGN(date1-date2), 1, date2, date1) The SIGN/DECODE combination is also helpful for numeric comparisons e.g. Sales Bonuses DECODE(SIGN(actual-target), -1, 'NO Bonus for you', 0,'Just made it', 1, 'Congrats, you are a winner')

Group_ID Function
In Oracle/PLSQL, the group_id function assigns a number to each group resulting from a GROUP BY clause. The group_id function is most commonly used to identify duplicated groups in your query results. For each unique group, the group_id function will return 0. When a duplicated group is found, the group_id function will return a value >0. The syntax for the group_id function is: select column1, column2, ... column_n, GROUP_ID() from tables where predicates GROUP BY column1, column2, ... column_n;

For example: select sum(salary), department, bonus, GROUP_ID() from employees where bonus > 100 GROUP BY department, ROLLUP (department, bonus);

You could use the HAVING clause to eliminated duplicated groups as follows: select sum(salary), department, bonus, GROUP_ID() from employees where bonus > 100 GROUP BY department, ROLLUP (department, bonus) HAVING GROUP_ID() < 1;

NANVL Function (NEW in Oracle 10)
In Oracle/PLSQL, the NANVL function lets you substitute a value for a floating point number such as BINARY_FLOAT or BINARY_DOUBLE, when a Nan (Not a number) value is encountered. This is most commonly used to convert Nan (Not a number) values into either NULL or 0. The syntax for the NANVL function is: NANVL( value, replace_with )

none
GE Confidential

37

value is the BINARY_FLOAT or BINARY_NUMBER to test for a Nan (Not a number). replace_with is the value returned if value is Nan (not a number).

Example #1: select NANVL(binary1, 0) from test_table; The SQL statement above would return 0 if the binary1 field contained a Nan (Not a number) value. Otherwise, it would return the binary1 value.

Example #2: select NANVL(binary1, NULL) from test_table; The SQL statement above would return NULL if the binary1 field contained a Nan (Not a number) value. Otherwise, it would return the binary1 value.

NVL Function
In Oracle/PLSQL, the NVL function lets you substitute a value when a null value is encountered. The syntax for the NVL function is: NVL( string1, replace_with ) string1 is the string to test for a null value. replace_with is the value returned if string1 is null.

Example #1: select NVL(supplier_city, 'n/a') from suppliers; The SQL statement above would return 'n/a' if the supplier_city field contained a null value. Otherwise, it would return the supplier_city value.

Example #2: select supplier_id, NVL(supplier_desc, supplier_name) from suppliers;

none
GE Confidential

38

This SQL statement would return the supplier_name field if the supplier_desc contained a null value. Otherwise, it would return the supplier_desc.

Example #3: select NVL(commission, 0) from sales; This SQL statement would return 0 if the commission field contained a null value. Otherwise, it would return the commission field.

Frequently Asked Questions
Question: I tried to use the NVL function through VB to access Oracle DB. To be precise, select NVL(DIstinct (emp_name),'AAA'),................ from................. I got an oracle error when I use distinct clause with NVL, but when I remove distinct it works fine. Answer: It is possible to the use the DISTINCT clause with the NVL function. However, the DISTINCT must come before the use of the NVL function. For example: select distinct NVL(emp_name, 'AAA') from employees; Hope this helps!

Question: Is it possible to use the NVL function with more than one column with the same function call? To be clear, if i need to apply this NVL function to more than one column like this: NVL(column1;column2 ...... , here is the default value for all ) Answer: You will need to make separate NVL function calls for each column. For example: select NVL(table_name, 'not found'), NVL(owner, 'not found') from all_tables;

NVL2 Function
In Oracle/PLSQL, the NVL2 function extends the functionality found in the NVL function. It lets you substitutes a value when a null value is encountered as well as when a non-null value is encountered. The syntax for the NVL2 function is: NVL2( string1, value_if_NOT_null, value_if_null )

none
GE Confidential

39

string1 is the string to test for a null value. value_if_NOT_null is the value returned if string1 is not null. value_if_null is the value returned if string1 is null.

Example #1: select NVL2(supplier_city, 'Completed', 'n/a') from suppliers; The SQL statement above would return 'n/a' if the supplier_city field contained a null value. Otherwise, it would return the 'Completed'.

Example #2: select supplier_id, NVL2(supplier_desc, supplier_name, supplier_name2) from suppliers; This SQL statement would return the supplier_name2 field if the supplier_desc contained a null value. Otherwise, it would return the supplier_name field.

Sys_Context Function
In Oracle/PLSQL, the sys_context function can be used to retrieve information about the Oracle environment. The syntax for the sys_context function is: sys_context( namespace, parameter, [ length ] ) namespace is an Oracle namespace that has already been created. If the namespace of 'USERENV' is used, attributes describing the current Oracle session can be returned. parameter is a valid attribute that has been set using the DBMS_SESSION.set_context procedure. length is optional. It is the length of the return value in bytes. If this parameter is omitted or if an invalid entry is provided, the sys_context function will default to 256 bytes.

The valid parameters for the namespace called 'USERENV' are as follows:

none
GE Confidential

40

Parameter AUDITED_CURSORID AUTHENTICATION_DATA AUTHENTICATION_TYPE BG_JOB_ID

Explanation Returns the cursor ID of the SQL that triggered the audit Authentication data Describes how the user was authenticated. Can be one of the following values: Database, OS, Network, or Proxy

Return Length N/A 256 30

If the session was established by an Oracle background 30 process, this parameter will return the Job ID. Otherwise, it will return NULL. Returns the client identifier (global context) User session information Returns the default schema used in the current schema 64 64 30

CLIENT_IDENTIFIER CLIENT_INFO CURRENT_SCHEMA CURRENT_SCHEMAID CURRENT_SQL CURRENT_USER CURRENT_USERID DB_DOMAIN DB_NAME ENTRYID EXTERNAL_NAME FG_JOB_ID

Returns the identifier of the default schema used in the current 30 schema Returns the SQL that triggered the audit event Name of the current user Userid of the current user Domain of the database from the DB_DOMAIN initialization parameter Name of the database from the DB_NAME initialization parameter Available auditing entry identifier External of the database user If the session was established by a client foreground process, this parameter will return the Job ID. Otherwise, it will return NULL. 64 30 30 256 30 30 256 30

GLOBAL_CONTEXT_MEMORY The number used in the System Global Area by the globally accessed context HOST INSTANCE IP_ADDRESS ISDBA LANG LANGUAGE

N/A

Name of the host machine from which the client has connected 54 The identifier number of the current instance 30

IP address of the machine from which the client has connected 30 Returns TRUE if the user has DBA privileges. Otherwise, it will return FALSE. The ISO abbreviate for the language The language, territory, and character of the session. In the following format: language_territory.characterset Network protocol used The calendar of the current session The currency of the current session 30 62 52

NETWORK_PROTOCOL NLS_CALENDAR NLS_CURRENCY

256 62 62

none
GE Confidential

41

NLS_DATE_FORMAT NLS_DATE_LANGUAGE NLS_SORT NLS_TERRITORY OS_USER PROXY_USER PROXY_USERID SESSION_USER SESSION_USERID SESSIONID TERMINAL

The date format for the current session The language used for dates BINARY or the linguistic sort basis The territory of the current session The OS username for the user logged in The name of the user who opened the current session on behalf of SESSION_USER The identifier of the user who opened the current session on behalf of SESSION_USER The database user name of the user logged in The database identifier of the user logged in The identifier of the auditing session The OS identifier of the current session

62 62 62 62 30 30 30 30 30 30 10

For example: sys_context('USERENV', 'NLS_DATE_FORMAT') sys_context('USERENV', 'NLS_SORT') would return 'RR-MM-DD' would return 'BINARY'

Uid function
In Oracle/PLSQL, the uid function returns the id number for a user's session (the user who is currently logged in). The syntax for the uid function is: uid

For example: select uid into parm_uid from dual; The variable called parm_uid will now contain the id number for the user's session. The value could be 25, for example.

User function
In Oracle/PLSQL, the user function returns the user_id from the current Oracle session.

none
GE Confidential

42

The syntax for the user function is: user

For example: select user into parm_user_ID from dual; The variable called parm_user_ID will now contain the Oracle user ID from the current Oracle session.

UserEnv Function
In Oracle/PLSQL, the userenv function can be used to retrieve information about the current Oracle session. Although this function still exists in Oracle for backwards compatibility, it is recommended that you use the sys_context function instead. The syntax for the userenv function is: userenv( parameter ) parameter is the value to return from the current Oracle session. The possible values are: Parameter CLIENT_INFO ENTRYID INSTANCE ISDBA LANG LANGUAGE Explanation Returns user session information stored using the DBMS_APPLICATION_INFO package Available auditing entry identifier The identifier number of the current instance Returns TRUE if the user has DBA privileges. Otherwise, it will return FALSE. The ISO abbreviate for the language The language, territory, and character of the session. In the following format: language_territory.characterset The identifier of the auditing session The OS identifier of the current session

SESSIONID TERMINAL

For example: userenv('ENTRYID') userenv('LANGUAGE') would return FALSE would return 'AMERICAN_AMERICA.WE8DEC'

none
GE Confidential

43

4. Mathematical Functions:
Abs Function
In Oracle/PLSQL, the abs function returns the absolute value of a number. The syntax for the abs function is: abs( number ) number is the number to convert to an absolute value.

For example: abs(-23) abs(-23.6) abs(-23.65) abs(23.65) abs(23.65 * -1) would return 23 would return 23.6 would return 23.65 would return 23.65 would return 23.65

Acos Function
In Oracle/PLSQL, the acos function returns the arc cosine of a number. The syntax for the acos function is: acos( number ) number is the number used to calculate the arc cosine.

For example: acos(0.2) acos(0.35) acos(-0.15) would return 1.36943840600457 would return 1.21322522314939 would return 1.72136459957158

none
GE Confidential

44

Asin Function
In Oracle/PLSQL, the asin function returns the arc sine of a number. The syntax for the asin function is: asin( number ) number is the number used to calculate the arc sine.

For example: asin(0.2) asin(0.35) asin(-0.15) would return 0.201357920790331 would return 0.35757110364551 would return -0.150568272776686

Atan Function
In Oracle/PLSQL, the atan function returns the arc tangent of a number. The syntax for the atan function is: atan( number ) number is the number used to calculate the arc tangent.

For example: atan(0.2) atan(0.35) atan(-0.15) would return 0.197395559849881 would return 0.336674819386727 would return -0.148889947609497

Atan2 Function
In Oracle/PLSQL, the atan2 function returns the arc tangent of n and m. The syntax for the atan2 function is: atan2( n, m ) n and m are the numbers used to calculate the arc tangent.

none
GE Confidential

45

For example: atan2(0.2, 0.3) atan2(0.35, -0.15) atan2(-0.3, -0.4) would return 0.588002603547568 would return 1.97568811307998 would return -2.49809154479651

Avg Function
In Oracle/PLSQL, the Avg function returns the average value of an expression. The basic syntax when using the Avg function is: SELECT Avg( expression ) FROM tables WHERE predicates; expression can be a numeric field or formula.

Simple Example
For example, you might wish to know how the average salary of all employees whose salary is above $25,000 / year. SELECT Avg(salary) as "Avg Salary" FROM employees WHERE salary > 25000;

Example using DISTINCT
You can use the DISTINCT clause within the Avg function. For example, the SQL statement below returns the average salary of unique salary values where the salary is above $25,000 / year. SELECT Avg(DISTINCT salary) as "Avg Salary" FROM employees WHERE salary > 25000; If there were two salaries of $30,000/year, only one of these values were be used in the Avg function.

Example using a Formula
The expression contained within the Avg function does not need to be a single field. You could also use a formula. For example, you might want the average commission. SELECT Avg(sales * 0.10) as "Average Commission" FROM orders;

none
GE Confidential

46

Example using GROUP BY
You could also use the Avg function to return the name of the department and the average sales (in the associated department). For example, SELECT department, Avg(sales) as "Avg sales" FROM order_details GROUP BY department; Because you have listed one column in your SELECT statement that is not encapsulated in the Avg function, you must use a GROUP BY clause. The department field must, therefore, be listed in the GROUP BY section.

Bin_To_Num Function
In Oracle/PLSQL, the bin_to_num function converts a bit vector to a number. The syntax for the bin_to_num function is: bin_to_num( expr1, expr2, ... expr_n) expr1, expr2, ... expr_n must be either 0 or 1 values. They represent bits in a bit vector.

For example: bin_to_num(1) bin_to_num(1,0) bin_to_num(1,1) bin_to_num(1,1,1,0) bin_to_num(1,1,1,1) would return 1 would return 2 would return 3 would return 14 would return 15

BitAnd Function
In Oracle/PLSQL, the bitand function returns an integer representing an AND operation on the bits of expr1 and expr2. The syntax for the bitand function is: bitand( expr1, expr2 ) expr1 and expr2 must resolve to non-negative integers.

For example:

none
GE Confidential

47

bitand(5,3) bitand(15,7) bitand(5,2) bitand(5,0) bitand(6,2)

would return 1 would return 7 would return 0 would return 0 would return 2

Ceil Function
In Oracle/PLSQL, the ceil function returns the smallest integer value that is greater than or equal to a number. The syntax for the ceil function is: ceil( number ) number is the value used to find the smallest integer value.

For example: ceil(32.65) ceil(32) ceil(-32.65) ceil(-32) would return 33. would return 32. would return -32. would return -32.

Corr Function
In Oracle/PLSQL, the corr function returns the coefficient of correlation of a set of number pairs. The syntax for the corr function is: corr( n ,m ) [ over (analytic_clause) ] n and m are the numbers to use to calculate the cofficient of correlation. The corr function requires at least two rows.

For example: select corr(quantity, commission) from sales;

none
GE Confidential

48

select max_entents, corr(max_trans, initial_extent) from data group by max_extents;

Cos Function
In Oracle/PLSQL, the cos function returns the cosine of a number. The syntax for the cos function is: cos( number ) number is the number used to calculate the cosine.

For example: cos(0.2) cos(0.35) cos(-3.15) cos(200) would return 0.980066577841242 would return 0.939372712847379 would return -0.999964658471342 would return 0.487187675007006

Cosh Function
In Oracle/PLSQL, the cosh function returns the hyperbolic cosine of a number. The syntax for the cosh function is: cosh( number ) number is the number used to calculate the hyperbolic cosine.

For example: cosh(0.2) cosh(0.35) cosh(-3.15) cosh(200) cosh(0) would return 1.02006675561908 would return 1.06187781915599 would return 11.6894583539049 would return 3.61298688406287E86 1

Covar_pop Function

none
GE Confidential

49

In Oracle/PLSQL, the covar_pop function returns the population covariance of a set of number pairs. The syntax for the covar_pop function is: covar_pop( expression1, expression2 ) expression1 is a numeric expression. expression2 is a numeric expression. The covar_pop function eliminates all pairs where expression1 or expression2 has a null value.

For example: select owner, covar_pop(avg_row_len, avg_space) from all_tables group by owner;

Covar_samp Function
In Oracle/PLSQL, the covar_samp function returns the sample covariance of a set of number pairs. The syntax for the covar_samp function is: covar_samp( expression1, expression2 ) expression1 is a numeric expression. expression2 is a numeric expression. The covar_samp function eliminates all pairs where expression1 or expression2 has a null value.

For example: select owner, covar_samp(avg_row_len, avg_space) from all_tables group by owner;

COUNT Function
The COUNT function returns the number of rows in a query. The syntax for the COUNT function is: SELECT COUNT(expression) FROM tables WHERE predicates;

none
GE Confidential

50

Simple Example
For example, you might wish to know how many employees have a salary that is above $25,000 / year. SELECT COUNT(*) as "Number of employees" FROM employees WHERE salary > 25000; In this example, we've aliased the count(*) field as "Number of employees". As a result, "Number of employees" will display as the field name when the result set is returned.

Example using DISTINCT
You can use the DISTINCT clause within the COUNT function. For example, the SQL statement below returns the number of unique departments where at least one employee makes over $25,000 / year. SELECT COUNT(DISTINCT department) as "Unique departments" FROM employees WHERE salary > 25000; Again, the count(DISTINCT department) field is aliased as "Unique departments". This is the field name that will display in the result set.

Example using GROUP BY
In some cases, you will be required to use a GROUP BY clause with the COUNT function. For example, you could use the COUNT function to return the name of the department and the number of employees (in the associated department) that make over $25,000 / year. SELECT department, COUNT(*) as "Number of employees" FROM employees WHERE salary > 25000 GROUP BY department; Because you have listed one column in your SELECT statement that is not encapsulated in the COUNT function, you must use a GROUP BY clause. The department field must, therefore, be listed in the GROUP BY section.

TIP: Performance Tuning
Since the COUNT function will return the same results regardless of what field(s) you include as the COUNT function parameters (ie: within the brackets), you can change the syntax of the COUNT function to COUNT(1) to get better performance as the database engine will not have to fetch back the data fields.

none
GE Confidential

51

For example, based on the example above, the following syntax would result in better performance: SELECT department, COUNT(1) as "Number of employees" FROM employees WHERE salary > 25000 GROUP BY department; Now, the COUNT function does not need to retrieve all fields from the employees table as it had to when you used the COUNT(*) syntax. It will merely retrieve the numeric value of 1 for each record that meets your criteria.

Cume_Dist Function
In Oracle/PLSQL, the cume_dist function returns the cumulative distribution of a value in a group of values. The cume_dist function will return a value that is >0 and <=1. The cume_dist function can be used two ways - as an Aggregate function or as an Analytic function.

Syntax #1 - Used as an Aggregate Function
As an Aggregate function, the cume_dist returns the relative position of a row within a group of rows. The syntax for the cume_dist function when used as an Aggregate function is: cume_dist( expression1, ... expression_n ) WITHIN GROUP ( ORDER BY expression1, ... expression_n ) expression1 .. expression_n can be one or more expressions which identify a unique row in the group.

Note: There must be the same number of expressions in the first expression list as there is in the ORDER BY clause. The expression lists match by position so the data types must be compatible between the expressions in the first expression list as in the ORDER BY clause.

For Example: select cume_dist(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees; The SQL statement above would return the cumulative distribution of an employee with a salary of $1,000 and a bonus of $500 from within the employees table.

none
GE Confidential

52

Syntax #2 - Used as an Analytic Function
As an Analytic function, the cume_dist returns the relative position of a value within a group of values. The syntax for the cume_dist function when used as an Analytic function is: cume_dist() OVER ( [ query_partition_clause] ORDER BY clause )

For Example: select employee_name, salary, cume_dist() OVER (PARTITION BY department ORDER BY salary) from employees where department = 'Marketing'; The SQL statement above would return the salary percentile for each employee in the Marketing department.

Dense_Rank Function
In Oracle/PLSQL, the dense_rank function returns the rank of a row in a group of rows. It is very similar to the rank function. However, the rank function can cause non-consecutive rankings if the tested values are the same. Whereas, the dense_rank function will always result in consecutive rankings. The dense_rank function can be used two ways - as an Aggregate function or as an Analytic function.

Syntax #1 - Used as an Aggregate Function
As an Aggregate function, the dense_rank returns the dense rank of a row within a group of rows. The syntax for the dense_rank function when used as an Aggregate function is: dense_rank( expression1, ... expression_n ) WITHIN GROUP ( ORDER BY expression1, ... expression_n ) expression1 .. expression_n can be one or more expressions which identify a unique row in the group.

Note: There must be the same number of expressions in the first expression list as there is in the ORDER BY clause. The expression lists match by position so the data types must be compatible between the expressions in the first expression list as in the ORDER BY clause.

none
GE Confidential

53

For Example: select dense_rank(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees; The SQL statement above would return the dense rank of an employee with a salary of $1,000 and a bonus of $500 from within the employees table.

Syntax #2 - Used as an Analytic Function
As an Analytic function, the dense_rank returns the rank of each row of a query with respective to the other rows. The syntax for the dense_rank function when used as an Analytic function is: dense_rank() OVER ( [ query_partition_clause] ORDER BY clause )

For Example: select employee_name, salary, dense_rank() OVER (PARTITION BY department ORDER BY salary) from employees where department = 'Marketing'; The SQL statement above would return all employees who work in the Marketing department and then calculate a rank for each unique salary in the Marketing department. If two employees had the same salary, the dense_rank function would return the same rank for both employees.

Exp Function
In Oracle/PLSQL, the exp function returns e raised to the nth power, where e = 2.71828183. The syntax for the exp function is: exp( number ) number is the power to raise e to.

For example: exp(3) exp(3.1) exp(-3) would return 20.0855369231877 would return 22.1979512814416 would return 0.0497870683678639

Extract Function
none
GE Confidential

54

In Oracle/PLSQL, the extract function extracts a value from a date or interval value. The syntax for the extract function is: EXTRACT ( { YEAR | MONTH | DAY | HOUR | MINUTE | SECOND } | { TIMEZONE_HOUR | TIMEZONE_MINUTE } | { TIMEZONE_REGION | TIMEZONE_ABBR } FROM { date_value | interval_value } ) You can only extract YEAR, MONTH, and DAY from a DATE. You can only extract TIMEZONE_HOUR and TIMEZONE_MINUTE from a timestamp with a time zone datatype.

For example: extract(YEAR FROM DATE '2003-08-22') extract(MONTH FROM DATE '2003-08-22') extract(DAY FROM DATE '2003-08-22') would return 2003 would return 8 would return 22

Floor Function
In Oracle/PLSQL, the floor function returns the largest integer value that is equal to or less than a number. The syntax for the floor function is: floor( number ) number is the value used to determine the largest integer value that is equal to or less than a number.

For example: floor(5.9) floor(34.29) floor(-5.9) would return 5 would return 34 would return -6

Greatest Function
In Oracle/PLSQL, the greatest function returns the greatest value in a list of expressions. The syntax for the greatest function is: greatest( expr1, expr2, ... expr_n )

none
GE Confidential

55

expr1, expr2, . expr_n are expressions that are evaluated by the greatest function. If the datatypes of the expressions are different, all expressions will be converted to whatever datatype expr1 is. If the comparison is based on a character comparison, one character is considered greater than another if it has a higher character set value.

For example: greatest(2, 5, 12, 3) greatest('2', '5', '12', '3') greatest('apples', 'oranges', 'bananas') greatest('apples', 'applis', 'applas') would return 12 would return '5' would return 'oranges' would return 'applis'

Least Function
In Oracle/PLSQL, the least function returns the smallest value in a list of expressions. The syntax for the least function is: least( expr1, expr2, ... expr_n ) expr1, expr2, . expr_n are expressions that are evaluated by the greatest function. If the datatypes of the expressions are different, all expressions will be converted to whatever datatype expr1 is. If the comparison is based on a character comparison, one character is considered smaller than another if it has a lower character set value.

For example: least(2, 5, 12, 3) least('2', '5', '12', '3') least('apples', 'oranges', 'bananas') least('apples', 'applis', 'applas') would return 2 would return '12' would return 'apples' would return 'applas'

Ln Function
In Oracle/PLSQL, the ln function returns the natural logarithm of a number. The syntax for the ln function is:

none
GE Confidential

56

ln( number ) number must be greater than 0.

For example: ln(20) ln(25) ln(100) ln(100.5) would return 2.99573227355399 would return 3.2188758248682 would return 4.60517018598809 would return 4.61015772749913

Log Function
In Oracle/PLSQL, the log function returns the logarithm of n base m. The syntax for the log function is: log( m, n ) m must be a positive number, except 0 or 1. n must be a positive number.

For example: log(10, 20) log(2, 15) log(100, 1) would return 1.30102999566398 would return 3.90689059560852 would return 0

MAX Function
The MAX function returns the maximum value of an expression. The syntax for the MAX function is: SELECT MAX(expression ) FROM tables WHERE predicates;

Simple Example
For example, you might wish to know the maximum salary of all employees.

none
GE Confidential

57

SELECT MAX(salary) as "Highest salary" FROM employees; In this example, we've aliased the max(salary) field as "Highest salary". As a result, "Highest salary" will display as the field name when the result set is returned.

Example using GROUP BY
In some cases, you will be required to use a GROUP BY clause with the MAX function. For example, you could also use the MAX function to return the name of each department and the maximum salary in the department. SELECT department, MAX(salary) as "Highest salary" FROM employees GROUP BY department; Because you have listed one column in your SELECT statement that is not encapsulated in the MAX function, you must use a GROUP BY clause. The department field must, therefore, be listed in the GROUP BY section.

Frequently Asked Questions
Question: I'm trying to pull some info out of a table. To simplify, let's say the table (report_history) has 4 columns: user_name, report_job_id, report_name, report_run_date. Each time a report is run in Oracle, a record is written to this table noting the above info. What I am trying to do is pull from this table when the last time each distinct report was run and who ran it last. My initial query: SELECT report_name, max(report_run_date) FROM report_history GROUP BY report_name runs fine. However, it does not provide the name of the user who ran the report. Adding user_name to both the select list and to the group by clause returns multiple lines for each report; the results show the last time each person ran each report in question. (i.e. User1 ran Report 1 on 01-JUL03, User2 ran Report1 on 01-AUG-03). I don't want that....I just want to know who ran a particular report the last time it was run. Any suggestions? Answer: This is where things get a bit complicated. The SQL statement below will return the results that you want:

none
GE Confidential

58

SELECT rh.user_name, rh.report_name, rh.report_run_date FROM report_history rh, (SELECT max(report_run_date) as maxdate, report_name FROM report_history GROUP BY report_name) maxresults WHERE rh.report_name = maxresults.report_name AND rh.report_run_date= maxresults.maxdate; Let's take a few moments to explain what we've done. First, we've aliased the first instance of the report_history table as rh. Second, we've included two components in our FROM clause. The first is the table called report_history (aliased as rh). The second is a select statement: (SELECT max(report_run_date) as maxdate, report_name FROM report_history GROUP BY report_name) maxresults We've aliased the max(report_run_date) as maxdate and we've aliased the entire result set as maxresults. Now, that we've created this select statement within our FROM clause, Oracle will let us join these results against our original report_history table. So we've joined the report_name and report_run_date fields between the tables called rh and maxresults. This allows us to retrieve the report_name, max(report_run_date) as well as the user_name.

Question: I need help in an SQL query. I have a table in Oracle called orders which has the following fields: order_no, customer, and amount. I need a query that will return the customer who has ordered the highest total amount. Answer: The following SQL should return the customer with the highest total amount in the orders table. select query1.* from (SELECT customer, Sum(orders.amount) AS total_amt FROM orders GROUP BY orders.customer) query1, (select max(query2.total_amt) as highest_amt from (SELECT customer, Sum(orders.amount) AS total_amt FROM orders GROUP BY orders.customer) query2) query3 where query1.total_amt = query3.highest_amt; This SQL statement will summarize the total orders for each customer and then return the customer with the highest total orders. This syntax is optimized for Oracle and may not work for other database technologies.

Question: I'm trying to retrieve some info from an Oracle database. I've got a table named Scoring with two fields - Name and Score. What I want to get is the highest score from the table and the name of the player. Answer: The following SQL should work:

none
GE Confidential

59

SELECT Name, Score FROM Scoring WHERE Score = (select Max(Score) from Scoring);

Median Function (NEW in Oracle 10)
In Oracle/PLSQL, the median function returns the median of an expression. The syntax for the median function is: median( expression ) [ OVER ( query partition clause ) ]

Note: The median function is NEW to Oracle 10! In older versions of Oracle, try using the percentile_cont function to calculate the median value.

For example: select median(salary) from employees where department = 'Marketing'; The SQL statement above would return the median salary for all employees in the Marketing department.

MIN Function
The MIN function returns the minimum value of an expression. The syntax for the MIN function is: SELECT MIN(expression ) FROM tables WHERE predicates;

Simple Example
For example, you might wish to know the minimum salary of all employees. SELECT MIN(salary) as "Lowest salary" FROM employees; In this example, we've aliased the min(salary) field as "Lowest salary". As a result, "Lowest salary" will display as the field name when the result set is returned.

none
GE Confidential

60

Example using GROUP BY
In some cases, you will be required to use a GROUP BY clause with the MIN function. For example, you could also use the MIN function to return the name of each department and the minimum salary in the department. SELECT department, MIN(salary) as "Lowest salary" FROM employees GROUP BY department; Because you have listed one column in your SELECT statement that is not encapsulated in the MIN function, you must use a GROUP BY clause. The department field must, therefore, be listed in the GROUP BY section.

Mod Function
In Oracle/PLSQL, the mod function returns the remainder of m divided by n. The syntax for the mod function is: mod( m, n ) Returns m if n is 0.

For example: mod(15, 4) mod(15, 0) mod(11.6, 2) mod(11.6, 2.1) mod(-15, 4) mod(-15, 0) would return 3 would return 15 would return 1.6 would return 1.1 would return -3 would return -15

Power Function
In Oracle/PLSQL, the power function returns m raised to the nth power. The syntax for the power function is: power( m, n ) m is the base. n is the exponent. If m is negative, then n must be an integer.

none
GE Confidential

61

For example: power(3, 2) power(5, 3) power(-5, 3) power(6.2, 3) power(6.2, 3.5) would return 9 would return 125 would return -125 would return 238.328 would return 593.431934277892

Rank Function
In Oracle/PLSQL, the rank function returns the rank of a value in a group of values. It is very similar to the dense_rank function. However, the rank function can cause non-consecutive rankings if the tested values are the same. Whereas, the dense_rank function will always result in consecutive rankings. The rank function can be used two ways - as an Aggregate function or as an Analytic function.

Syntax #1 - Used as an Aggregate Function
As an Aggregate function, the rank returns the rank of a row within a group of rows. The syntax for the rank function when used as an Aggregate function is: rank( expression1, ... expression_n ) WITHIN GROUP ( ORDER BY expression1, ... expression_n ) expression1 .. expression_n can be one or more expressions which identify a unique row in the group.

Note: There must be the same number of expressions in the first expression list as there is in the ORDER BY clause. The expression lists match by position so the data types must be compatible between the expressions in the first expression list as in the ORDER BY clause.

For Example: select rank(1000, 500) WITHIN GROUP (ORDER BY salary, bonus) from employees; The SQL statement above would return the rank of an employee with a salary of $1,000 and a bonus of $500 from within the employees table.

none
GE Confidential

62

Syntax #2 - Used as an Analytic Function
As an Analytic function, the rank returns the rank of each row of a query with respective to the other rows. The syntax for the rank function when used as an Analytic function is: rank() OVER ( [ query_partition_clause] ORDER BY clause )

For Example: select employee_name, salary, rank() OVER (PARTITION BY department ORDER BY salary) from employees where department = 'Marketing'; The SQL statement above would return all employees who work in the Marketing department and then calculate a rank for each unique salary in the Marketing department. If two employees had the same salary, the rank function would return the same rank for both employees. However, this will cause a gap in the ranks (ie: non-consecutive ranks). This is quite different from the dense_rank function which generates consecutive rankings.

Remainder Function (NEW in Oracle 10)
In Oracle/PLSQL, the remainder function returns the remainder of m divided by n. The syntax for the remainder function is: remainder( m, n )

Note: The remainder function is NEW to Oracle 10! In older versions of Oracle, try using the mod function.

For example: remainder(15, 4) remainder(15, 0) remainder(11.6, 2) remainder(11.6, 2.1) remainder(-15, 4) remainder(-15, 0) would return 3 would return 15 would return 1.6 would return 1.1 would return -3 would return -15

Round Function (with numbers) 63
GE Confidential

none

In Oracle/PLSQL, the round function returns a number rounded to a certain number of decimal places. The syntax for the round function is: round( number, [ decimal_places ] ) number is the number to round. decimal_places is the number of decimal places rounded to. This value must be an integer. If this parameter is omitted, the round function will round the number to 0 decimal places.

For example: round(125.315) round(125.315, 0) round(125.315, 1) round(125.315, 2) round(125.315, 3) round(-125.315, 2) would return 125 would return 125 would return 125.3 would return 125.32 would return 125.315 would return -125.32

Round Function (with dates)
In Oracle/PLSQL, the round function returns a date rounded to a specific unit of measure. The syntax for the round function is: round( date, [ format ] ) date is the date to round. format is the unit of measure to apply for rounding. If the format parameter is omitted, the round function will round to the nearest day.

Below are the valid format parameters: Unit Year ISO Year Quarter Month Week Valid format parameters SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y IYYY, IY, I Q MONTH, MON, MM, RM WW Rounds up on the 16th day of the second month of the quarter Rounds up on the 16th day of the month Same day of the week as the first Rounding Rule Rounds up on July 1st

none
GE Confidential

64

day of the year IW W Day IW W DDD, DD, J Same day of the week as the first day of the ISO year Same day of the week as the first day of the month

Start day of the week DAY, DY, D Hour Minute HH, HH12, HH24 MI

For example: round(to_date ('22-AUG-03'),'YEAR') round(to_date ('22-AUG-03'),'Q') round(to_date ('22-AUG-03'),'MONTH') round(to_date ('22-AUG-03'),'DDD') round(to_date ('22-AUG-03'),'DAY') would return '01-JAN-04' would return '01-OCT-03' would return '01-SEP-03' would return '22-AUG-03' would return '24-AUG-03'

Sign Function
In Oracle/PLSQL, the sign function returns a value indicating the sign of a number. The syntax for the sign function is: sign( number ) number is the number to test for its sign. If number < 0, then sign returns -1. If number = 0, then sign returns 0. If number > 0, then sign returns 1.

For example: sign(-23) sign(-0.001) sign(0) sign(0.001) sign(23) sign(23.601) would return -1 would return -1 would return 0 would return 1 would return 1 would return 1

Sin Function
none
GE Confidential

65

In Oracle/PLSQL, the sin function returns the sine of n. The syntax for the sin function is: sin( n ) n is a number. It is an angle expressed in radians.

For example: sin(3) sin(5.2) sin(-5.2) would return 0.141120008059867 would return -0.883454655720153 would return 0.883454655720153

Sinh Function
In Oracle/PLSQL, the sinh function returns the hyperbolic sine of n. The syntax for the sinh function is: sinh( n ) n is a number.

For example: sinh(3) sinh(5.2) sinh(-5.2) would return 10.0178749274099 would return 90.6333626553652 would return -90.6333626553652

Sqrt Function
In Oracle/PLSQL, the sqrt function returns the square root of n. The syntax for the sqrt function is: sqrt( n ) n is a positive number.

For example:

none
GE Confidential

66

sqrt(9) sqrt(37) sqrt(5.617)

would return 3 would return 6.08276253029822 would return 2.37002109695251

StdDev Function
In Oracle/PLSQL, the stddev function returns the standard deviation of a set of numbers. The stddev function can be used two ways - as an Aggregate function or as an Analytic function.

Syntax #1 - Used as an Aggregate Function
The syntax for the stddev function when used as an Aggregate function is: stddev( [ DISTINCT | ALL ] expression )

For Example: select stddev(bonus) from employees; The SQL statement above would return the standard deviation of the bonus field in the employees table.

Syntax #2 - Used as an Analytic Function
The syntax for the cume_dist function when used as an Analytic function is: stddev( [ DISTINCT | ALL ] expression ) [ OVER ( analytical_clause ) ]

For Example: select employee_name, bonus, stddev(bonus) OVER (ORDER BY salary) from employees where department = 'Marketing'; The SQL statement above would return the cumulative standard deviation of the bonuses in the Marketing department in the employees table, ordered by salary.

SUM Function

none
GE Confidential

67

The SUM function returns the summed value of an expression. The syntax for the SUM function is: SELECT SUM(expression ) FROM tables WHERE predicates; expression can be a numeric field or formula.

Simple Example
For example, you might wish to know how the combined total salary of all employees whose salary is above $25,000 / year. SELECT SUM(salary) as "Total Salary" FROM employees WHERE salary > 25000; In this example, we've aliased the sum(salary) field as "Total Salary". As a result, "Total Salary" will display as the field name when the result set is returned.

Example using DISTINCT
You can use the DISTINCT clause within the SUM function. For example, the SQL statement below returns the combined total salary of unique salary values where the salary is above $25,000 / year. SELECT SUM(DISTINCT salary) as "Total Salary" FROM employees WHERE salary > 25000; If there were two salaries of $30,000/year, only one of these values would be used in the SUM function.

Example using a Formula
The expression contained within the SUM function does not need to be a single field. You could also use a formula. For example, you might want the net income for a business. Net Income is calculated as total income less total expenses. SELECT SUM(income - expenses) as "Net Income" FROM gl_transactions;

You might also want to perform a mathematical operation within a SUM function. For example, you might determine total commission as 10% of total sales.

none
GE Confidential

68

SELECT SUM(sales * 0.10) as "Commission" FROM order_details;

Example using GROUP BY
In some cases, you will be required to use a GROUP BY clause with the SUM function. For example, you could also use the SUM function to return the name of the department and the total sales (in the associated department). SELECT department, SUM(sales) as "Total sales" FROM order_details GROUP BY department; Because you have listed one column in your SELECT statement that is not encapsulated in the SUM function, you must use a GROUP BY clause. The department field must, therefore, be listed in the GROUP BY section.

Tan Function
In Oracle/PLSQL, the tan function returns the tangent of n. The syntax for the tan function is: tan( n ) n is a number. It is an angle expressed in radians.

For example: tan(3) tan(5.2) tan(-5.2) would return -0.142546543074278 would return -1.88564187751976 would return 1.88564187751976

Tanh Function
In Oracle/PLSQL, the tanh function returns the hyperbolic tangent of n. The syntax for the tanh function is: tanh( n ) n is a number.

none
GE Confidential

69

For example: tanh(3) tanh(5.2) tanh(-5.2) would return 0.99505475368673 would return 0.999939136886199 would return -0.999939136886199

Trunc Function (with dates)
In Oracle/PLSQL, the trunc function returns a date truncated to a specific unit of measure. The syntax for the trunc function is: trunc ( date, [ format ] ) date is the date to truncate. format is the unit of measure to apply for truncating. If the format parameter is omitted, the trunc function will truncate the date to the day value, so that any hours, minutes, or seconds will be truncated off.

Below are the valid format parameters: Unit Year ISO Year Quarter Month Week IW W Day Start day of the week Hour Minute Valid format parameters SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y IYYY, IY, I Q MONTH, MON, MM, RM WW IW W DDD, DD, J DAY, DY, D HH, HH12, HH24 MI

For example: trunc(to_date('22-AUG-03'), 'YEAR') trunc(to_date('22-AUG-03'), 'Q') trunc(to_date('22-AUG-03'), 'MONTH') trunc(to_date('22-AUG-03'), 'DDD') trunc(to_date('22-AUG-03'), 'DAY') would return '01-JAN-03' would return '01-JUL-03' would return '01-AUG-03' would return '22-AUG-03' would return '17-AUG-03'

none
GE Confidential

70

Trunc Function (with numbers)
In Oracle/PLSQL, the trunc function returns a number truncated to a certain number of decimal places. The syntax for the trunc function is: trunc( number, [ decimal_places ] ) number is the number to truncate. decimal_places is the number of decimal places to truncate to. This value must be an integer. If this parameter is omitted, the round function will truncate the number to 0 decimal places.

For example: trunc(125.815) trunc(125.815, 0) trunc(125.815, 1) trunc(125.815, 2) trunc(125.815, 3) trunc(-125.815, 2) trunc(125.815, -1) trunc(125.815, -2) trunc(125.815, -3) would return 125 would return 125 would return 125.8 would return 125.81 would return 125.815 would return -125.81 would return 120 would return 100 would return 0

Var_pop Function
In Oracle/PLSQL, the var_pop function returns the population variance of a set of numbers. The syntax for the var_pop function is: var_pop( expression ) expression is a numeric expression. The var_pop function eliminates all null values before performing its calculations.

For example: select var_pop(data_length) from all_tab_columns;

Var_samp Function
none
GE Confidential

71

In Oracle/PLSQL, the var_samp function returns the sample variance of a set of numbers. The syntax for the var_samp function is: var_samp( expression ) expression is a numeric expression. The var_samp function eliminates all null values before performing its calculations.

For example: select var_samp(char_length) from all_tab_columns;

Variance Function
In Oracle/PLSQL, the variance function returns the variance of a set of numbers. The syntax for the variance function is: variance( expression ) expression is a numeric expression.

For example: select variance(char_length) from all_tab_columns;

5. Date Functions:
Add_Months Function
In Oracle/PLSQL, the add_months function returns a date plus n months. The syntax for the add_months function is: add_months( date1, n ) date1 is the starting date (before the n months have been added.

none
GE Confidential

72

n is the number of months to add to date1.

For example: add_months('01-Aug-03', 3) add_months('01-Aug-03', -3) add_months('21-Aug-03', -3) add_months('31-Jan-03', 1) would return '01-Nov-03' would return '01-May-03' would return '21-May-03' would return '28-Feb-03'

Current_Date function
In Oracle/PLSQL, the current_date function returns the current date in the time zone of the current SQL session as set by the ALTER SESSION command. The syntax for the current_date function is: current_date

For example: If the following ALTER SESSION command was issued: ALTER SESSION SET TIME_ZONE = '-7:0'; And then the following SQL statement was executed: select current_date from dual; You might get the following result: 9/10/2005 10:58:24 PM You then modified the session time zone with the following ALTER SESSION command: ALTER SESSION SET TIME_ZONE = '-2:0'; And then the following SQL statement was executed: select current_date from dual; You would now get the following result: 9/11/2005 3:58:24 AM

none
GE Confidential

73

The session time zone value has changed from -7:0 to -2:0, causing the current_date function to return the current date as a value 5 hours ahead.

Current_Timestamp function
In Oracle/PLSQL, the current_timestamp function returns the current date and time in the time zone of the current SQL session as set by the ALTER SESSION command. It returns a TIMESTAMP WITH TIME ZONE value. A similar function to the current_timestamp function is the localtimestamp function. The difference between these two functions is that the current_timestamp function returns a TIMESTAMP WITH TIME ZONE value while the localtimestamp function returns a TIMESTAMP value. The syntax for the current_timestamp function is: current_timestamp

For example: If the following ALTER SESSION command was issued: ALTER SESSION SET TIME_ZONE = '-7:0'; And then the following SQL statement was executed: select current_timestamp from dual; You might get the following result: 10-Sep-05 10.58.24.853421 PM -07:00 You then modified the session time zone with the following ALTER SESSION command: ALTER SESSION SET TIME_ZONE = '-2:0'; And then the following SQL statement was executed: select current_timestamp from dual; You would now get the following result: 10-Sep-05 03.58.24.853421 AM -02:00 The session time zone value has changed from -7:0 to -2:0, causing the current_timestamp function to return the current date and time as a value 5 hours ahead.

Tz_Offset Function 74
GE Confidential

none

In Oracle/PLSQL, the tz_offset function returns the time zone offset of a value. The syntax for the tz_offset function is: tz_offset( timezone ) timezone can be a valid time zone name, a time zone offset from UTC, the sessiontimezone function, or the dbtimezone function. Some of the more commonly used time zone names are: Canada/Atlantic Canada/Central Canada/East-Saskatchewan Canada/Eastern Canada/Mountain Canada/Newfoundland Canada/Pacific Canada/Saskatchewan Canada/Yukon Europe/Dublin Europe/Istanbul Europe/Lisbon Europe/London Europe/Moscow Europe/Warsaw Greenwich Pacific/Auckland Pacific/Chatham To find more time zone values, you can run the following query: select distinct tzname from V$TIMEZONE_NAMES; Pacific/Easter Pacific/Honolulu Pacific/Kwajalein Pacific/Pago_Pago Pacific/Samoa US/Alaska US/Aleutian US/Arizona US/Central US/East-Indiana US/Eastern US/Hawaii US/Michigan US/Mountain US/Pacific US/Pacific-New US/Samoa

For example: tz_offset('US/Michigan') tz_offset('-08:00') tz_offset(sessiontimezone) tz_offset(dbtimezone) would return '-05:00' would return '-08:00' would return '-07:00' (depending on your configuration) would return '-07:00' (depending on your configuration)

DbTimeZone Function

none
GE Confidential

75

In Oracle/PLSQL, the dbtimezone function returns the database time zone as a time zone offset (in the following format: '[+|-]TZH:TZM') or a time zone region name. The syntax for the dbtimezone function is: dbtimezone

For example: select dbtimezone from dual; The dbtimezone function might return a value like this: +00:00 or a value such as this: -07:00

The value returned depends on the time zone value set in your individual Oracle database.

From_Tz function
In Oracle/PLSQL, the from_tz function converts a TIMESTAMP value (given a TIME ZONE) to a TIMESTAMP WITH TIME ZONE value. The syntax for the from_tz function is: from_tz( timestamp_value, time_zone_value ) timestamp_value is the value to convert to a TIMESTAMP WITH TIME ZONE value. time_zone_value is the time zone used to convert timestamp_value to a TIMESTAMP WITH TIME ZONE value.

For example: If you executed the following SQL statement:

none
GE Confidential

76

select from_tz(TIMESTAMP '2005-09-11 01:50:42', '5:00') from dual; You would now get the following result: 11-Sep-05 01.50.42.000000 AM +05:00

If you executed the same SQL statement, but set the time zone to '-7:00' as follows: select from_tz(TIMESTAMP '2005-09-11 01:50:42', '-7:00') from dual; You would now get the following result: 11-Sep-05 01.50.42.000000 AM -07:00

Last_Day Function
In Oracle/PLSQL, the last_day function returns the last day of the month based on a date value. The syntax for the last_day function is: last_day( date ) date is the date value to use to calculate the last day of the month.

For example: last_day(to_date('2003/03/15', 'yyyy/mm/dd')) last_day(to_date('2003/02/03', 'yyyy/mm/dd')) last_day(to_date('2004/02/03', 'yyyy/mm/dd')) would return Mar 31, 2003 would return Feb 28, 2003 would return Feb 29, 2004

LocalTimestamp function
In Oracle/PLSQL, the localtimestamp function returns the current date and time in the time zone of the current SQL session as set by the ALTER SESSION command. It returns a TIMESTAMP value. A similar function to the localtimestamp function is the current_timestamp function. The difference between these two functions is that the localtimestamp function returns a TIMESTAMP value while the current_timestamp function returns a TIMESTAMP WITH TIME ZONE value. The syntax for the localtimestamp function is: localtimestamp

none
GE Confidential

77

For example: If the following ALTER SESSION command was issued: ALTER SESSION SET TIME_ZONE = '-7:0'; And then the following SQL statement was executed: select localtimestamp from dual; You might get the following result: 10-Sep-05 10.58.24 PM You then modified the session time zone with the following ALTER SESSION command: ALTER SESSION SET TIME_ZONE = '-2:0'; And then the following SQL statement was executed: select localtimestamp from dual; You would now get the following result: 10-Sep-05 03.58.24 AM The session time zone value has changed from -7:0 to -2:0, causing the localtimestamp function to return the current date and time as a value 5 hours ahead.

New_Time Function
In Oracle/PLSQL, the new_time function returns a date in time zone1 to a date in time zone2. The syntax for the new_time function is: new_time( date, zone1, zone2 ) zone1 and zone2 can be any of the following values: Value AST ADT BST BDT CST CDT Description Atlantic Standard Time Atlantic Daylight Time Bering Standard Time Bering Daylight Time Central Standard Time Central Daylight Time

none
GE Confidential

78

EST EDT GMT HST HDT MST MDT NST PST PDT YST YDT

Eastern Standard Time Eastern Daylight Time Greenwich Mean Time Alaska-Hawaii Standard Time Alaska-Hawaii Daylight Time Mountain Standard Time Mountain Daylight Time Newfoundland Standard Time Pacific Standard Time Pacific Daylight Time Yukon Standard Time Yukon Daylight Time

For example: The following new_time example converts an Atlantic Standard Time into a Mountain Standard Time: new_time (to_date ('2003/11/01 01:45', 'yyyy/mm/dd HH24:MI'), 'AST', 'MST') This example would return '2003/10/31 10:45:00 PM'.

Next_Day Function
In Oracle/PLSQL, the next_day function returns the first weekday that is greater than a date. The syntax for the next_day function is: next_day( date, weekday ) date is used to find the next weekday. weekday is a day of the week (ie: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY)

For example: next_day('01-Aug-03', 'TUESDAY') next_day('06-Aug-03', 'WEDNESDAY') next_day('06-Aug-03', 'SUNDAY') would return '05-Aug-03' would return '13-Aug-03' would return '10-Aug-03'

Round Function (with dates) 79
GE Confidential

none

In Oracle/PLSQL, the round function returns a date rounded to a specific unit of measure. The syntax for the round function is: round( date, [ format ] ) date is the date to round. format is the unit of measure to apply for rounding. If the format parameter is omitted, the round function will round to the nearest day.

Below are the valid format parameters: Unit Year ISO Year Quarter Month Week IW W Day Valid format parameters SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y IYYY, IY, I Q MONTH, MON, MM, RM WW IW W DDD, DD, J Rounds up on the 16th day of the second month of the quarter Rounds up on the 16th day of the month Same day of the week as the first day of the year Same day of the week as the first day of the ISO year Same day of the week as the first day of the month Rounding Rule Rounds up on July 1st

Start day of the week DAY, DY, D Hour Minute HH, HH12, HH24 MI

For example: round(to_date ('22-AUG-03'),'YEAR') round(to_date ('22-AUG-03'),'Q') round(to_date ('22-AUG-03'),'MONTH') round(to_date ('22-AUG-03'),'DDD') round(to_date ('22-AUG-03'),'DAY') would return '01-JAN-04' would return '01-OCT-03' would return '01-SEP-03' would return '22-AUG-03' would return '24-AUG-03'

SessionTimeZone Function

none
GE Confidential

80

In Oracle/PLSQL, the sessiontimezone function returns the current session's time zone as a time zone offset (in the following format: '[+|-]TZH:TZM') or a time zone region name. The syntax for the sessiontimezone function is: sessiontimezone

For example: select sessiontimezone from dual; The sessiontimezone function might return a value like this: +00:00 or a value such as this: -07:00

The value returned depends on how the user specified the session time zone value in the most recent ALTER SESSION statement. An example of an ALTER SESSION command is: ALTER SESSION SET TIME_ZONE = '-7:0';

Months_Between Function
In Oracle/PLSQL, the months_between function returns the number of months between date1 and date2. The syntax for the months_between function is: months_between( date1, date2 ) date1 and date2 are the dates used to calculate the number of months. If a fractional month is calculated, the months_between function calculates the fraction based on a 31-day month.

Example #1
months_between (to_date ('2003/01/01', 'yyyy/mm/dd'), to_date ('2003/03/14', 'yyyy/mm/dd') ) would return -2.41935483870968

none
GE Confidential

81

Example #2
months_between (to_date ('2003/07/01', 'yyyy/mm/dd'), to_date ('2003/03/14', 'yyyy/mm/dd') ) would return 3.58064516129032

Example #3
months_between (to_date ('2003/07/02', 'yyyy/mm/dd'), to_date ('2003/07/02', 'yyyy/mm/dd') ) would return 0

Example #4
months_between (to_date ('2003/08/02', 'yyyy/mm/dd'), to_date ('2003/06/02', 'yyyy/mm/dd') ) would return 2

SysTimestamp function
In Oracle/PLSQL, the systimestamp function returns the current system date and time (including fractional seconds and time zone) on your local database. The syntax for the systimestamp function is: systimestamp

For example: select systimestamp from dual; The systimezone function might return a value like this: 03-11-21 20:4

You can also choose to use the to_char function with the systimestamp function. For example: select to_char(systimestamp, 'SSSS.FF') from dual; The function above may return a value such as:

none
GE Confidential

82

4141.550774

To_Char Function
In Oracle/PLSQL, the to_char function converts a number or date to a string. The syntax for the to_char function is: to_char( value, [ format_mask ], [ nls_language ] ) value can either be a number or date that will be converted to a string. format_mask is optional. This is the format that will be used to convert value to a string. nls_language is optional. This is the nls language used to convert value to a string.

Examples - Numbers
The following are number examples for the to_char function. to_char(1210.73, '9999.9') to_char(1210.73, '9,999.99') to_char(1210.73, '$9,999.00') to_char(21, '000099') would return '1210.7' would return '1,210.73' would return '$1,210.73' would return '000021'

Examples - Dates
The following is a list of valid parameters when the to_char function is used to convert a date to a string. These parameters can be used in many combinations. Parameter YEAR YYYY YYY YY Y IYY IY I IYYY Q MM MON Year, spelled out 4-digit year Last 3, 2, or 1 digit(s) of year. Explanation

Last 3, 2, or 1 digit(s) of ISO year.

4-digit year based on the ISO standard Quarter of year (1, 2, 3, 4; JAN-MAR = 1). Month (01-12; JAN = 01). Abbreviated name of month.

none
GE Confidential

83

MONTH RM WW W IW D DAY DD DDD DY J HH HH12 HH24 MI SS SSSSS FF

Name of month, padded with blanks to length of 9 characters. Roman numeral month (I-XII; JAN = I). Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh. Week of year (1-52 or 1-53) based on the ISO standard. Day of week (1-7). Name of day. Day of month (1-31). Day of year (1-366). Abbreviated name of day. Julian day; the number of days since January 1, 4712 BC. Hour of day (1-12). Hour of day (1-12). Hour of day (0-23). Minute (0-59). Second (0-59). Seconds past midnight (0-86399). Fractional seconds.

The following are date examples for the to_char function. to_char(sysdate, 'yyyy/mm/dd'); to_char(sysdate, 'Month DD, YYYY'); to_char(sysdate, 'FMMonth DD, YYYY'); to_char(sysdate, 'MON DDth, YYYY'); to_char(sysdate, 'FMMON DDth, YYYY'); to_char(sysdate, 'FMMon ddth, YYYY'); would return '2003/07/09' would return 'July 09, 2003' would return 'July 9, 2003' would return 'JUL 09TH, 2003' would return 'JUL 9TH, 2003' would return 'Jul 9th, 2003'

You will notice that in some examples, the format_mask parameter begins with "FM". This means that zeros and blanks are suppressed. This can be seen in the examples below. to_char(sysdate, 'FMMonth DD, YYYY'); to_char(sysdate, 'FMMON DDth, YYYY'); to_char(sysdate, 'FMMon ddth, YYYY'); would return 'July 9, 2003' would return 'JUL 9TH, 2003' would return 'Jul 9th, 2003'

The zeros have been suppressed so that the day component shows as "9" as opposed to "09".

none
GE Confidential

84

Frequently Asked Questions
Question: Why doesn't this sort the day's of the week in order? select ename, hiredate, to_char((hiredate),'fmDay') "Day" from emp order by "Day"; Answer: The fmDay parameter will return the name of the Day and not the numeric value of the day. Try the following: select ename, hiredate, to_char((hiredate),'fmDD') "Day" from emp order by "Day";

Sysdate function
In Oracle/PLSQL, the sysdate function returns the current system date and time on your local database. The syntax for the sysdate function is: sysdate

Example #1
select sysdate into v_date from dual; The variable called v_date will now contain the current date and time value.

Example #2
You could also use the sysdate function in any SQL statement. For example: select supplier_id, sysdate from suppliers where supplier_id > 5000;

Example #3
If you wanted to extract the date portion only (and exclude the time component), you could use the to_char function. For example:

none
GE Confidential

85

select supplier_id, to_char(sysdate, 'yyyy/mm/dd') from suppliers where supplier_id > 5000;

To_Date Function
In Oracle/PLSQL, the to_date function converts a string to a date. The syntax for the to_date function is: to_date( string1, [ format_mask ], [ nls_language ] ) string1 is the string that will be converted to a date. format_mask is optional. This is the format that will be used to convert string1 to a date. nls_language is optional. This is the nls language used to convert string1 to a date.

The following is a list of options for the format_mask parameter. These parameters can be used in many combinations. Parameter YEAR YYYY YYY YY Y IYY IY I IYYY RRRR Q MM MON MONTH RM WW W Year, spelled out 4-digit year Last 3, 2, or 1 digit(s) of year. Explanation

Last 3, 2, or 1 digit(s) of ISO year. 4-digit year based on the ISO standard Accepts a 2-digit year and returns a 4-digit year. A value between 0-49 will return a 20xx year. A value between 50-99 will return a 19xx year. Quarter of year (1, 2, 3, 4; JAN-MAR = 1). Month (01-12; JAN = 01). Abbreviated name of month. Name of month, padded with blanks to length of 9 characters. Roman numeral month (I-XII; JAN = I). Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.

none
GE Confidential

86

IW D DAY DD DDD DY J HH HH12 HH24 MI SS SSSSS FF

Week of year (1-52 or 1-53) based on the ISO standard. Day of week (1-7). Name of day. Day of month (1-31). Day of year (1-366). Abbreviated name of day. Julian day; the number of days since January 1, 4712 BC. Hour of day (1-12). Hour of day (1-12). Hour of day (0-23). Minute (0-59). Second (0-59). Seconds past midnight (0-86399). Fractional seconds. Use a value from 1 to 9 after FF to indicate the number of digits in the fractional seconds. For example, 'FF4'.

AM, A.M., PM, or P.M. Meridian indicator AD or A.D BC or B.C. TZD TZH TZM TZR AD indicator BC indicator Daylight savings information. For example, 'PST' Time zone hour. Time zone minute. Time zone region.

For example: to_date('2003/07/09', 'yyyy/mm/dd') to_date('070903', 'MMDDYY') to_date('20020315', 'yyyymmdd') would return a date value of July 9, 2003. would return a date value of July 9, 2003. would return a date value of Mar 15, 2002.

Trunc Function (with dates)
In Oracle/PLSQL, the trunc function returns a date truncated to a specific unit of measure. The syntax for the trunc function is: trunc ( date, [ format ] ) date is the date to truncate.

none
GE Confidential

87

format is the unit of measure to apply for truncating. If the format parameter is omitted, the trunc function will truncate the date to the day value, so that any hours, minutes, or seconds will be truncated off.

Below are the valid format parameters: Unit Year ISO Year Quarter Month Week IW W Day Start day of the week Hour Minute Valid format parameters SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y IYYY, IY, I Q MONTH, MON, MM, RM WW IW W DDD, DD, J DAY, DY, D HH, HH12, HH24 MI

For example: trunc(to_date('22-AUG-03'), 'YEAR') trunc(to_date('22-AUG-03'), 'Q') trunc(to_date('22-AUG-03'), 'MONTH') trunc(to_date('22-AUG-03'), 'DDD') trunc(to_date('22-AUG-03'), 'DAY') would return '01-JAN-03' would return '01-JUL-03' would return '01-AUG-03' would return '22-AUG-03' would return '17-AUG-03'

6. Error Functions:
SQLCODE Function

What does the SQLCODE Function do?
The SQLCODE function returns the error number associated with the most recently raised error exception. This function should only be used within the Exception Handling section of your code:

none
GE Confidential

88

EXCEPTION WHEN exception_name1 THEN [statements] WHEN exception_name2 THEN [statements] WHEN exception_name_n THEN [statements] WHEN OTHERS THEN [statements] END [procedure_name];

You could use the SQLCODE function to raise an error as follows: EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); END;

Or you could log the error to a table as follows: EXCEPTION WHEN OTHERS THEN err_code := SQLCODE; err_msg := substr(SQLERRM, 1, 200); INSERT INTO audit_table (error_number, error_message) VALUES (err_code, err_msg); END;

Learn more about the SQLERRM Function.

SQLERRM Function

What does the SQLERRM Function do?
The SQLERRM function returns the error message associated with the most recently raised error exception. This function should only be used within the Exception Handling section of your code: EXCEPTION WHEN exception_name1 THEN [statements] WHEN exception_name2 THEN [statements]

none
GE Confidential

89

WHEN exception_name_n THEN [statements] WHEN OTHERS THEN [statements] END [procedure_name];

You could use the SQLERRM function to raise an error as follows: EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); END;

Or you could log the error to a table as follows: EXCEPTION WHEN OTHERS THEN err_code := SQLCODE; err_msg := substr(SQLERRM, 1, 200); INSERT INTO audit_table (error_number, error_message) VALUES (err_code, err_msg); END;

Learn more about the SQLCODE Function.

7. Miscellaneous Functions:
Uid function
In Oracle/PLSQL, the uid function returns the id number for a user's session (the user who is currently logged in). The syntax for the uid function is: uid For example: select uid into parm_uid from dual; The variable called parm_uid will now contain the id number for the user's session. The value could be 25, for example.

none
GE Confidential

90

User function
In Oracle/PLSQL, the user function returns the user_id from the current Oracle session. The syntax for the user function is: user

For example: select user into parm_user_ID from dual;

The variable called parm_user_ID will now contain the Oracle user ID from the current Oracle session.

none
GE Confidential

91