Sql Functions

  • November 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Sql Functions as PDF for free.

More details

  • Words: 17,869
  • Pages: 91
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

1

none GE Confidential

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

2

none GE Confidential

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

3

none GE Confidential

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')

would return 116.

ascii('T')

would return 84.

ascii('T2')

would also return 84.

To view a listing of the ascii values, click here

4

none GE Confidential

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 Ä Ê')

would return 'A B C \00C4 \00CA'

asciistr('A B C Õ Ø')

would return 'A B C \00D5 \00D8'

asciistr('A B C Ä Ê Í Õ Ø')

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);

would return 't'.

chr(84);

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:

5

none GE Confidential

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

Resulting character

unistr('\0300')

grave accent ( ` )

unistr('\0301')

acute accent ( ´ )

unistr('\0302')

circumflex ( ^ )

unistr('\0303')

tilde ( ~ )

unistr('\0308')

umlaut ( ¨ )

For example: compose('o' || unistr('\0308') )

would return ö

compose('a' || unistr('\0302') )

would return â

compose('e' || unistr('\0301') )

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');

would return 'Tech on the Net'.

concat('a', 'b')

would return 'ab'.

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

6

none GE Confidential

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'

would return 'Tech on the Net'.

'a' || 'b' || 'c' || 'd'

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

Description

US7ASCII

US 7-bit ASCII character set

WE8DEC

West European 8-bit character set

WE8HP

HP West European Laserjet 8-bit character set

F7DEC

DEC French 7-bit character set

WE8EBCDIC500

IBM West European EBCDIC Code Page 500

WE8PC850

IBM PC Code Page 850

WE8ISO8859P1

ISO 8859-1 West European 8-bit character set

7

none GE Confidential

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')

would return 'Tre`s bien'

decompose('é')

would return 'e´'

decompose('olé')

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

Explanation

8

octal notation

10

decimal notation

16

hexadecimal notation

17

single characters

1008

octal notation with the character set name

1010

decimal notation with the character set name

1016

hexadecimal notation with the character set name

1017

single characters with the character set name

8

none GE Confidential

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')

would return 'Typ=96 Len=4: 84,101,99,104'

dump('Tech', 10)

would return 'Typ=96 Len=4: 84,101,99,104'

dump('Tech', 16)

would return 'Typ=96 Len=4: 54,65,63,68'

dump('Tech', 1016)

would return 'Typ=96 Len=4 CharacterSet=US7ASCII: 54,65,63,68'

dump('Tech', 1017)

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.

9

none GE Confidential

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')

would return 2; the first occurrence of 'e'

instr('Tech on the net', 'e', 1, 1)

would return 2; the first occurrence of 'e'

instr('Tech on the net', 'e', 1, 2)

would return 11; the second occurrence of 'e'

instr('Tech on the net', 'e', 1, 3)

would return 14; the third occurrence of 'e'

instr('Tech on the net', 'e', -3, 2)

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)

would return NULL.

length('')

would return NULL.

length('Tech on the Net')

would return 15.

length('Tech on the Net ')

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.

10

none GE Confidential

For example: lower('Tech on the Net');

would return 'tech on the net'

lower('GEORGE BURNS 123 ');

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);

would return ' tech'

lpad('tech', 2);

would return 'te'

lpad('tech', 8, '0');

would return '0000tech'

lpad('tech on the net', 15, 'z');

would return 'tech on the net'

lpad('tech on the net', 16, 'z');

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.

11

none GE Confidential

For example: ltrim(' tech');

would return 'tech'

ltrim(' tech', ' ');

would return 'tech'

ltrim('000123', '0');

would return '123'

ltrim('123123Tech', '123');

would return 'Tech'

ltrim('123123Tech123', '123');

would return 'Tech123'

ltrim('xyxzyyyTech', 'xyz');

would return 'Tech'

ltrim('6372Tech', '0123456789');

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');

would return 'tech'

replace('123tech123', '123');

would return 'tech'

12

none GE Confidential

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

would return '333tech'

replace('0000123', '0');

would return '123'

replace('0000123', '0', ' ');

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);

would return 'tech '

rpad('tech', 2);

would return 'te'

rpad('tech', 8, '0');

would return 'tech0000'

rpad('tech on the net', 15, 'z');

would return 'tech on the net'

rpad('tech on the net', 16, 'z');

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'

13

none GE Confidential

rtrim('tech ', ' ');

would return 'tech'

rtrim('123000', '0');

would return '123'

rtrim('Tech123123', '123');

would return 'Tech'

rtrim('123Tech123', '123');

would return '123Tech'

rtrim('Techxyxzyyy', 'xyz');

would return 'Tech'

rtrim('Tech6372', '0123456789');

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.

The soundex return value will always begin with the first letter of string1.

2.

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.

3.

The soundex function is not case-sensitive. What this means is that both uppercase and lowercase characters will generate the same soundex return value.

14

none GE Confidential

For example: soundex('tech on the net');

would return 'T253'

soundex('TECH ON THE NET');

would return 'T253'

soundex('apples');

would return 'A142'

soundex('apples are great');

would return 'A142'

soundex('applus');

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)

would return 'is'

substr('This is a test', 6)

would return 'is a test'

substr('TechOnTheNet', 1, 4)

would return 'Tech'

substr('TechOnTheNet', -3, 3)

would return 'Net'

substr('TechOnTheNet', -6, 3)

would return 'The'

substr('TechOnTheNet', -8, 2)

would return 'On'

Translate Function 15

none GE Confidential

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);

would return '4tech56'

translate('222tech, '2ec', '3it');

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:

16

none GE Confidential

trim(' tech ')

would return 'tech'

trim(' ' from ' tech ')

would return 'tech'

trim(leading '0' from '000123')

would return '123'

trim(trailing '1' from 'Tech1')

would return 'Tech'

trim(both '1' from '123Tech111')

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');

would return 'TECH ON THE NET'

upper('george burns 123 ');

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')

would return 15

vsize('Tech on the net ')

would return 16

vsize(null)

would return

vsize('')

would return

vsize(' ')

would return 1

2. Conversion Functions: 17

none GE Confidential

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)

would return 1

bin_to_num(1,0)

would return 2

bin_to_num(1,1)

would return 3

bin_to_num(1,1,1,0)

would return 14

bin_to_num(1,1,1,1)

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

FROM char, varchar2

number

datetime / interval

raw

rowid, urowid

char, varchar2

X

X

X

X

X

number

X

X

datetime / interval

X

raw

X

nchar, nvarchar2

X X

18

none GE Confidential

rowid, urowid

X

nchar, nvarchar2

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 )

19

none GE Confidential

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')

would return '045D' as a raw value

hextoraw('7E')

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.

20

none GE Confidential

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')

would return '+000000150'

numtodsinterval(1500, 'HOUR')

would return '+000000062'

numtodsinterval(15000, 'MINUTE')

would return '+000000010'

numtodsinterval(150000, 'SECOND')

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')

would return '+0083'

numtoyminterval(100000, 'YEAR')

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.

21

none GE Confidential

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')

would return '1210.7'

to_char(1210.73, '9,999.99')

would return '1,210.73'

to_char(1210.73, '$9,999.00')

would return '$1,210.73'

to_char(21, '000099')

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

Explanation

YEAR

Year, spelled out

YYYY

4-digit year

YYY YY Y

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

IYY IY I

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

IYYY

4-digit year based on the ISO standard

Q

Quarter of year (1, 2, 3, 4; JAN-MAR = 1).

MM

Month (01-12; JAN = 01).

MON

Abbreviated name of month.

MONTH

Name of month, padded with blanks to length of 9 characters.

RM

Roman numeral month (I-XII; JAN = I).

WW

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.

W

Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.

IW

Week of year (1-52 or 1-53) based on the ISO standard.

D

Day of week (1-7).

DAY

Name of day.

DD

Day of month (1-31).

DDD

Day of year (1-366).

22

none GE Confidential

DY

Abbreviated name of day.

J

Julian day; the number of days since January 1, 4712 BC.

HH

Hour of day (1-12).

HH12

Hour of day (1-12).

HH24

Hour of day (0-23).

MI

Minute (0-59).

SS

Second (0-59).

SSSSS

Seconds past midnight (0-86399).

FF

Fractional seconds.

The following are date examples for the to_char function. to_char(sysdate, 'yyyy/mm/dd');

would return '2003/07/09'

to_char(sysdate, 'Month DD, YYYY');

would return 'July 09, 2003'

to_char(sysdate, 'FMMonth DD, YYYY');

would return 'July 9, 2003'

to_char(sysdate, 'MON DDth, YYYY');

would return 'JUL 09TH, 2003'

to_char(sysdate, 'FMMON DDth, YYYY');

would return 'JUL 9TH, 2003'

to_char(sysdate, 'FMMon ddth, YYYY');

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');

would return 'July 9, 2003'

to_char(sysdate, 'FMMON DDth, YYYY');

would return 'JUL 9TH, 2003'

to_char(sysdate, 'FMMon ddth, YYYY');

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:

23

none GE Confidential

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

Explanation

YEAR

Year, spelled out

YYYY

4-digit year

24

none GE Confidential

YYY YY Y

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

IYY IY I

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

IYYY

4-digit year based on the ISO standard

RRRR

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.

Q

Quarter of year (1, 2, 3, 4; JAN-MAR = 1).

MM

Month (01-12; JAN = 01).

MON

Abbreviated name of month.

MONTH

Name of month, padded with blanks to length of 9 characters.

RM

Roman numeral month (I-XII; JAN = I).

WW

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.

W

Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.

IW

Week of year (1-52 or 1-53) based on the ISO standard.

D

Day of week (1-7).

DAY

Name of day.

DD

Day of month (1-31).

DDD

Day of year (1-366).

DY

Abbreviated name of day.

J

Julian day; the number of days since January 1, 4712 BC.

HH

Hour of day (1-12).

HH12

Hour of day (1-12).

HH24

Hour of day (0-23).

MI

Minute (0-59).

SS

Second (0-59).

SSSSS

Seconds past midnight (0-86399).

FF

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

AD indicator

BC or B.C.

BC indicator

TZD

Daylight savings information. For example, 'PST'

TZH

Time zone hour.

25

none GE Confidential

TZM

Time zone minute.

TZR

Time zone region.

For example: to_date('2003/07/09', 'yyyy/mm/dd')

would return a date value of July 9, 2003.

to_date('070903', 'MMDDYY')

would return a date value of July 9, 2003.

to_date('20020315', 'yyyymmdd')

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;

26

none GE Confidential

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')

would return the number 1210.73

to_number('546', '999')

would return the number 546

to_number('23', '99')

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'

27

none GE Confidential

to_dsinterval('80 12:30:00')

would return '+000000080'

to_dsinterval('95 18:30:00')

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.

28

none GE Confidential

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

Explanation

YYYY

4-digit year

MM

Month (01-12; JAN = 01).

MON

Abbreviated name of month.

MONTH

Name of month, padded with blanks to length of 9 characters.

DD

Day of month (1-31).

HH

Hour of day (1-12).

HH12

Hour of day (1-12).

HH24

Hour of day (0-23).

MI

Minute (0-59).

SS

Second (0-59).

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' ] )

29

none GE Confidential

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

Explanation

YYYY

4-digit year

MM

Month (01-12; JAN = 01).

MON

Abbreviated name of month.

MONTH

Name of month, padded with blanks to length of 9 characters.

DD

Day of month (1-31).

HH

Hour of day (1-12).

HH12

Hour of day (1-12).

HH24

Hour of day (0-23).

MI

Minute (0-59).

SS

Second (0-59).

TZM

Time zone minute.

TZH

Time zone hour.

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.

30

none GE Confidential

For example: to_yminterval('03-11')

would return 3 years 11 months as an INTERVAL YEAR TO MONTH type

to_yminterval('01-05')

would return 1 year 5 months as an INTERVAL YEAR TO MONTH type

to_yminterval('00-01')

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)

31

none GE Confidential

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:

32

none GE Confidential

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.

33

none GE Confidential

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.

34

none GE Confidential

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:

35

none GE Confidential

(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),

0, 1,

0.04, 0.04, 0.06) as perc_value

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:

36

none GE Confidential

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 )

37

none GE Confidential

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;

38

none GE Confidential

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 )

39

none GE Confidential

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:

40

none GE Confidential

Parameter

Explanation

Return Length

AUDITED_CURSORID

Returns the cursor ID of the SQL that triggered the audit

N/A

AUTHENTICATION_DATA

Authentication data

256

AUTHENTICATION_TYPE

Describes how the user was authenticated. Can be one of the following values: Database, OS, Network, or Proxy

30

BG_JOB_ID

If the session was established by an Oracle background 30 process, this parameter will return the Job ID. Otherwise, it will return NULL.

CLIENT_IDENTIFIER

Returns the client identifier (global context)

64

CLIENT_INFO

User session information

64

CURRENT_SCHEMA

Returns the default schema used in the current schema

30

CURRENT_SCHEMAID

Returns the identifier of the default schema used in the current 30 schema

CURRENT_SQL

Returns the SQL that triggered the audit event

64

CURRENT_USER

Name of the current user

30

CURRENT_USERID

Userid of the current user

30

DB_DOMAIN

Domain of the database from the DB_DOMAIN initialization parameter

256

DB_NAME

Name of the database from the DB_NAME initialization parameter

30

ENTRYID

Available auditing entry identifier

30

EXTERNAL_NAME

External of the database user

256

FG_JOB_ID

If the session was established by a client foreground process, this parameter will return the Job ID. Otherwise, it will return NULL.

30

GLOBAL_CONTEXT_MEMORY The number used in the System Global Area by the globally accessed context

N/A

HOST

Name of the host machine from which the client has connected 54

INSTANCE

The identifier number of the current instance

IP_ADDRESS

IP address of the machine from which the client has connected 30

ISDBA

Returns TRUE if the user has DBA privileges. Otherwise, it will return FALSE.

30

LANG

The ISO abbreviate for the language

62

LANGUAGE

The language, territory, and character of the session. In the following format: language_territory.characterset

52

NETWORK_PROTOCOL

Network protocol used

256

NLS_CALENDAR

The calendar of the current session

62

NLS_CURRENCY

The currency of the current session

62

30

41

none GE Confidential

NLS_DATE_FORMAT

The date format for the current session

62

NLS_DATE_LANGUAGE

The language used for dates

62

NLS_SORT

BINARY or the linguistic sort basis

62

NLS_TERRITORY

The territory of the current session

62

OS_USER

The OS username for the user logged in

30

PROXY_USER

The name of the user who opened the current session on behalf of SESSION_USER

30

PROXY_USERID

The identifier of the user who opened the current session on behalf of SESSION_USER

30

SESSION_USER

The database user name of the user logged in

30

SESSION_USERID

The database identifier of the user logged in

30

SESSIONID

The identifier of the auditing session

30

TERMINAL

The OS identifier of the current session

10

For example: sys_context('USERENV', 'NLS_DATE_FORMAT')

would return 'RR-MM-DD'

sys_context('USERENV', 'NLS_SORT')

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.

42

none GE Confidential

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

Explanation

CLIENT_INFO

Returns user session information stored using the DBMS_APPLICATION_INFO package

ENTRYID

Available auditing entry identifier

INSTANCE

The identifier number of the current instance

ISDBA

Returns TRUE if the user has DBA privileges. Otherwise, it will return FALSE.

LANG

The ISO abbreviate for the language

LANGUAGE

The language, territory, and character of the session. In the following format: language_territory.characterset

SESSIONID

The identifier of the auditing session

TERMINAL

The OS identifier of the current session

For example: userenv('ENTRYID')

would return FALSE

userenv('LANGUAGE')

would return 'AMERICAN_AMERICA.WE8DEC'

43

none GE Confidential

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)

would return 23

abs(-23.6)

would return 23.6

abs(-23.65)

would return 23.65

abs(23.65)

would return 23.65

abs(23.65 * -1)

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)

would return 1.36943840600457

acos(0.35)

would return 1.21322522314939

acos(-0.15)

would return 1.72136459957158

44

none GE Confidential

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)

would return 0.201357920790331

asin(0.35)

would return 0.35757110364551

asin(-0.15)

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)

would return 0.197395559849881

atan(0.35)

would return 0.336674819386727

atan(-0.15)

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.

45

none GE Confidential

For example: atan2(0.2, 0.3)

would return 0.588002603547568

atan2(0.35, -0.15)

would return 1.97568811307998

atan2(-0.3, -0.4)

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;

46

none GE Confidential

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)

would return 1

bin_to_num(1,0)

would return 2

bin_to_num(1,1)

would return 3

bin_to_num(1,1,1,0)

would return 14

bin_to_num(1,1,1,1)

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:

47

none GE Confidential

bitand(5,3)

would return 1

bitand(15,7)

would return 7

bitand(5,2)

would return 0

bitand(5,0)

would return 0

bitand(6,2)

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)

would return 33.

ceil(32)

would return 32.

ceil(-32.65)

would return -32.

ceil(-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;

48

none GE Confidential

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)

would return 0.980066577841242

cos(0.35)

would return 0.939372712847379

cos(-3.15)

would return -0.999964658471342

cos(200)

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)

would return 1.02006675561908

cosh(0.35)

would return 1.06187781915599

cosh(-3.15)

would return 11.6894583539049

cosh(200)

would return 3.61298688406287E86

cosh(0)

1

Covar_pop Function

49

none GE Confidential

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;

50

none GE Confidential

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.

51

none GE Confidential

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.

52

none GE Confidential

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.

53

none GE Confidential

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)

would return 20.0855369231877

exp(3.1)

would return 22.1979512814416

exp(-3)

would return 0.0497870683678639

Extract Function 54

none GE Confidential

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')

would return 2003

extract(MONTH FROM DATE '2003-08-22')

would return 8

extract(DAY FROM DATE '2003-08-22')

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)

would return 5

floor(34.29)

would return 34

floor(-5.9)

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 )

55

none GE Confidential

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)

would return 12

greatest('2', '5', '12', '3')

would return '5'

greatest('apples', 'oranges', 'bananas')

would return 'oranges'

greatest('apples', 'applis', 'applas')

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)

would return 2

least('2', '5', '12', '3')

would return '12'

least('apples', 'oranges', 'bananas')

would return 'apples'

least('apples', 'applis', 'applas')

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:

56

none GE Confidential

ln( number ) number must be greater than 0.

For example: ln(20)

would return 2.99573227355399

ln(25)

would return 3.2188758248682

ln(100)

would return 4.60517018598809

ln(100.5)

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)

would return 1.30102999566398

log(2, 15)

would return 3.90689059560852

log(100, 1)

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.

57

none GE Confidential

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:

58

none GE Confidential

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:

59

none GE Confidential

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.

60

none GE Confidential

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)

would return 3

mod(15, 0)

would return 15

mod(11.6, 2)

would return 1.6

mod(11.6, 2.1)

would return 1.1

mod(-15, 4)

would return -3

mod(-15, 0)

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.

61

none GE Confidential

For example: power(3, 2)

would return 9

power(5, 3)

would return 125

power(-5, 3)

would return -125

power(6.2, 3)

would return 238.328

power(6.2, 3.5)

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.

62

none GE Confidential

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)

would return 3

remainder(15, 0)

would return 15

remainder(11.6, 2)

would return 1.6

remainder(11.6, 2.1)

would return 1.1

remainder(-15, 4)

would return -3

remainder(-15, 0)

would return -15

Round Function (with numbers) 63

none GE Confidential

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)

would return 125

round(125.315, 0)

would return 125

round(125.315, 1)

would return 125.3

round(125.315, 2)

would return 125.32

round(125.315, 3)

would return 125.315

round(-125.315, 2)

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

Valid format parameters

Rounding Rule

Year

SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y

Rounds up on July 1st

ISO Year

IYYY, IY, I

Quarter

Q

Rounds up on the 16th day of the second month of the quarter

Month

MONTH, MON, MM, RM

Rounds up on the 16th day of the month

Week

WW

Same day of the week as the first

64

none GE Confidential

day of the year IW

IW

Same day of the week as the first day of the ISO year

W

W

Same day of the week as the first day of the month

Day

DDD, DD, J

Start day of the week DAY, DY, D Hour

HH, HH12, HH24

Minute

MI

For example: round(to_date ('22-AUG-03'),'YEAR')

would return '01-JAN-04'

round(to_date ('22-AUG-03'),'Q')

would return '01-OCT-03'

round(to_date ('22-AUG-03'),'MONTH')

would return '01-SEP-03'

round(to_date ('22-AUG-03'),'DDD')

would return '22-AUG-03'

round(to_date ('22-AUG-03'),'DAY')

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)

would return -1

sign(-0.001)

would return -1

sign(0)

would return 0

sign(0.001)

would return 1

sign(23)

would return 1

sign(23.601)

would return 1

Sin Function 65

none GE Confidential

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)

would return 0.141120008059867

sin(5.2)

would return -0.883454655720153

sin(-5.2)

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)

would return 10.0178749274099

sinh(5.2)

would return 90.6333626553652

sinh(-5.2)

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:

66

none GE Confidential

sqrt(9)

would return 3

sqrt(37)

would return 6.08276253029822

sqrt(5.617)

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

67

none GE Confidential

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.

68

none GE Confidential

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)

would return -0.142546543074278

tan(5.2)

would return -1.88564187751976

tan(-5.2)

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.

69

none GE Confidential

For example: tanh(3)

would return 0.99505475368673

tanh(5.2)

would return 0.999939136886199

tanh(-5.2)

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

Valid format parameters

Year

SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y

ISO Year

IYYY, IY, I

Quarter

Q

Month

MONTH, MON, MM, RM

Week

WW

IW

IW

W

W

Day

DDD, DD, J

Start day of the week

DAY, DY, D

Hour

HH, HH12, HH24

Minute

MI

For example: trunc(to_date('22-AUG-03'), 'YEAR')

would return '01-JAN-03'

trunc(to_date('22-AUG-03'), 'Q')

would return '01-JUL-03'

trunc(to_date('22-AUG-03'), 'MONTH')

would return '01-AUG-03'

trunc(to_date('22-AUG-03'), 'DDD')

would return '22-AUG-03'

trunc(to_date('22-AUG-03'), 'DAY')

would return '17-AUG-03'

70

none GE Confidential

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)

would return 125

trunc(125.815, 0)

would return 125

trunc(125.815, 1)

would return 125.8

trunc(125.815, 2)

would return 125.81

trunc(125.815, 3)

would return 125.815

trunc(-125.815, 2)

would return -125.81

trunc(125.815, -1)

would return 120

trunc(125.815, -2)

would return 100

trunc(125.815, -3)

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 71

none GE Confidential

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.

72

none GE Confidential

n is the number of months to add to date1.

For example: add_months('01-Aug-03', 3)

would return '01-Nov-03'

add_months('01-Aug-03', -3)

would return '01-May-03'

add_months('21-Aug-03', -3)

would return '21-May-03'

add_months('31-Jan-03', 1)

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

73

none GE Confidential

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

none GE Confidential

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

Pacific/Easter

Canada/Central

Pacific/Honolulu

Canada/East-Saskatchewan

Pacific/Kwajalein

Canada/Eastern

Pacific/Pago_Pago

Canada/Mountain

Pacific/Samoa

Canada/Newfoundland

US/Alaska

Canada/Pacific

US/Aleutian

Canada/Saskatchewan

US/Arizona

Canada/Yukon

US/Central

Europe/Dublin

US/East-Indiana

Europe/Istanbul

US/Eastern

Europe/Lisbon

US/Hawaii

Europe/London

US/Michigan

Europe/Moscow

US/Mountain

Europe/Warsaw

US/Pacific

Greenwich

US/Pacific-New

Pacific/Auckland

US/Samoa

Pacific/Chatham To find more time zone values, you can run the following query: select distinct tzname from V$TIMEZONE_NAMES;

For example: tz_offset('US/Michigan')

would return '-05:00'

tz_offset('-08:00')

would return '-08:00'

tz_offset(sessiontimezone)

would return '-07:00' (depending on your configuration)

tz_offset(dbtimezone)

would return '-07:00' (depending on your configuration)

DbTimeZone Function

75

none GE Confidential

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:

76

none GE Confidential

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'))

would return Mar 31, 2003

last_day(to_date('2003/02/03', 'yyyy/mm/dd'))

would return Feb 28, 2003

last_day(to_date('2004/02/03', 'yyyy/mm/dd'))

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

77

none GE Confidential

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

Description

AST

Atlantic Standard Time

ADT

Atlantic Daylight Time

BST

Bering Standard Time

BDT

Bering Daylight Time

CST

Central Standard Time

CDT

Central Daylight Time

78

none GE Confidential

EST

Eastern Standard Time

EDT

Eastern Daylight Time

GMT

Greenwich Mean Time

HST

Alaska-Hawaii Standard Time

HDT

Alaska-Hawaii Daylight Time

MST

Mountain Standard Time

MDT

Mountain Daylight Time

NST

Newfoundland Standard Time

PST

Pacific Standard Time

PDT

Pacific Daylight Time

YST

Yukon Standard Time

YDT

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')

would return '05-Aug-03'

next_day('06-Aug-03', 'WEDNESDAY')

would return '13-Aug-03'

next_day('06-Aug-03', 'SUNDAY')

would return '10-Aug-03'

Round Function (with dates) 79

none GE Confidential

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

Valid format parameters

Rounding Rule

Year

SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y

Rounds up on July 1st

ISO Year

IYYY, IY, I

Quarter

Q

Rounds up on the 16th day of the second month of the quarter

Month

MONTH, MON, MM, RM

Rounds up on the 16th day of the month

Week

WW

Same day of the week as the first day of the year

IW

IW

Same day of the week as the first day of the ISO year

W

W

Same day of the week as the first day of the month

Day

DDD, DD, J

Start day of the week DAY, DY, D Hour

HH, HH12, HH24

Minute

MI

For example: round(to_date ('22-AUG-03'),'YEAR')

would return '01-JAN-04'

round(to_date ('22-AUG-03'),'Q')

would return '01-OCT-03'

round(to_date ('22-AUG-03'),'MONTH')

would return '01-SEP-03'

round(to_date ('22-AUG-03'),'DDD')

would return '22-AUG-03'

round(to_date ('22-AUG-03'),'DAY')

would return '24-AUG-03'

SessionTimeZone Function

80

none GE Confidential

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

81

none GE Confidential

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:

82

none GE Confidential

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')

would return '1210.7'

to_char(1210.73, '9,999.99')

would return '1,210.73'

to_char(1210.73, '$9,999.00')

would return '$1,210.73'

to_char(21, '000099')

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

Explanation

YEAR

Year, spelled out

YYYY

4-digit year

YYY YY Y

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

IYY IY I

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

IYYY

4-digit year based on the ISO standard

Q

Quarter of year (1, 2, 3, 4; JAN-MAR = 1).

MM

Month (01-12; JAN = 01).

MON

Abbreviated name of month.

83

none GE Confidential

MONTH

Name of month, padded with blanks to length of 9 characters.

RM

Roman numeral month (I-XII; JAN = I).

WW

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.

W

Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.

IW

Week of year (1-52 or 1-53) based on the ISO standard.

D

Day of week (1-7).

DAY

Name of day.

DD

Day of month (1-31).

DDD

Day of year (1-366).

DY

Abbreviated name of day.

J

Julian day; the number of days since January 1, 4712 BC.

HH

Hour of day (1-12).

HH12

Hour of day (1-12).

HH24

Hour of day (0-23).

MI

Minute (0-59).

SS

Second (0-59).

SSSSS

Seconds past midnight (0-86399).

FF

Fractional seconds.

The following are date examples for the to_char function. to_char(sysdate, 'yyyy/mm/dd');

would return '2003/07/09'

to_char(sysdate, 'Month DD, YYYY');

would return 'July 09, 2003'

to_char(sysdate, 'FMMonth DD, YYYY');

would return 'July 9, 2003'

to_char(sysdate, 'MON DDth, YYYY');

would return 'JUL 09TH, 2003'

to_char(sysdate, 'FMMON DDth, YYYY');

would return 'JUL 9TH, 2003'

to_char(sysdate, 'FMMon ddth, YYYY');

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');

would return 'July 9, 2003'

to_char(sysdate, 'FMMON DDth, YYYY');

would return 'JUL 9TH, 2003'

to_char(sysdate, 'FMMon ddth, YYYY');

would return 'Jul 9th, 2003'

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

84

none GE Confidential

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:

85

none GE Confidential

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

Explanation

YEAR

Year, spelled out

YYYY

4-digit year

YYY YY Y

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

IYY IY I

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

IYYY

4-digit year based on the ISO standard

RRRR

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.

Q

Quarter of year (1, 2, 3, 4; JAN-MAR = 1).

MM

Month (01-12; JAN = 01).

MON

Abbreviated name of month.

MONTH

Name of month, padded with blanks to length of 9 characters.

RM

Roman numeral month (I-XII; JAN = I).

WW

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.

W

Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh.

86

none GE Confidential

IW

Week of year (1-52 or 1-53) based on the ISO standard.

D

Day of week (1-7).

DAY

Name of day.

DD

Day of month (1-31).

DDD

Day of year (1-366).

DY

Abbreviated name of day.

J

Julian day; the number of days since January 1, 4712 BC.

HH

Hour of day (1-12).

HH12

Hour of day (1-12).

HH24

Hour of day (0-23).

MI

Minute (0-59).

SS

Second (0-59).

SSSSS

Seconds past midnight (0-86399).

FF

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

AD indicator

BC or B.C.

BC indicator

TZD

Daylight savings information. For example, 'PST'

TZH

Time zone hour.

TZM

Time zone minute.

TZR

Time zone region.

For example: to_date('2003/07/09', 'yyyy/mm/dd')

would return a date value of July 9, 2003.

to_date('070903', 'MMDDYY')

would return a date value of July 9, 2003.

to_date('20020315', 'yyyymmdd')

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.

87

none GE Confidential

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

Valid format parameters

Year

SYYYY, YYYY, YEAR, SYEAR, YYY, YY, Y

ISO Year

IYYY, IY, I

Quarter

Q

Month

MONTH, MON, MM, RM

Week

WW

IW

IW

W

W

Day

DDD, DD, J

Start day of the week

DAY, DY, D

Hour

HH, HH12, HH24

Minute

MI

For example: trunc(to_date('22-AUG-03'), 'YEAR')

would return '01-JAN-03'

trunc(to_date('22-AUG-03'), 'Q')

would return '01-JUL-03'

trunc(to_date('22-AUG-03'), 'MONTH')

would return '01-AUG-03'

trunc(to_date('22-AUG-03'), 'DDD')

would return '22-AUG-03'

trunc(to_date('22-AUG-03'), 'DAY')

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:

88

none GE Confidential

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]

89

none GE Confidential

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.

90

none GE Confidential

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.

91

none GE Confidential

Related Documents

Sql Functions
June 2020 7
Sql Functions
November 2019 10
Functions
November 2019 47
Functions
December 2019 49
Functions
May 2020 27