Você está na página 1de 7

Lista de Funes SQL

Obtendo como plataforma a base de dados Oracle, abaixo falarei sobre funes SQL, seus tipos, categorias e listarei todas elas. Com o tempo estarei explicando a funcionalidade, usuabilidade e sintaxe de cada uma delas. Em mais de 90% dos casos, o tratamento de excesses e utilizao das funes comum comparado a outras bases de dados portanto serve como referncia no s para Oracle. Bom basicamente as funes so recursos usados em meio a query SQL

No Oracle, se voc chamar uma funo SQL passando um argumento de tipo incompatvel com o tipo esperado, o sistema tentar converter o argumento para o tipo vlido. Se voc chamar uma funo com um argumento vazio, ou seja, NULL, ento automaticamente a funo retorna NULL. As funes SQL so divididas em categorias, segue: - Funes de uma linha: - Funes Numricas - Funes Alfanumricas - Funes de Data e Hora - Funes de converso - Funes de coleo - Funes variadas - Funes de agregaes (ou agregadas) - Funes analticas - Funes de referncia objecto - Funes de modelo - Funes definidas pelo usurio Segue agora uma lista de todas as funes (da base de dados Oracle) com suas respectivas explicaes de uso e sintaxe.

Funes de Uma Linha


Numricas

ABS

Uma funo matemtica que retorna o valor absoluto (positivo) da expresso numrica especificada. retorna o arco-cosseno do numero informado. retorna o arco-seno do numero informado. retorna o arco-tangente do numero informado.

ACOS ASIN ATAN

ATAN2 BITAND CEIL COS COSH EXP FLOOR LN LOG MOD NANVL POWER REMAINDER ROUND(numero) SIGN SIN SINH SQRT TAN TANH TRUNC(numero) WIDTH_BUCKET Caracter CHR CONCAT INITCAP LOWER LPAD LTRIM NLS_INITCAP NLS_LOWER NLSSORT NLS_UPPER REGEXP_REPLACE REGEEXP_SUBSTR REPLACE RPAD RTRIM SOUNDEX SUBSTR TRANSLATE TREAT TRIM UPPER

Carcter com retorno numrico ASCII INSTR LENGTH REGEXP_INSTR Data/Hora ADD_MONTHS CURRENT_DATE CURRENT_TIMESTAMP DBTIMEZONE EXTRACT(data/hora) FROM_TZ LAST_DAY LOCALTIMESTAMP MONTHS_BETWEEN NEW_TIME NEXT_DAY NUMTODSINTERVAL NUMTOYMINTERVAL ROUND(data) SESSIONTIMEZONE SYS_EXTRACT_UTC SYSDATE SYSTIMESTAMP TO_CHAR(data/hora) TO_TIMESTAMP TO_TIMESTAMP_TZ TO_DSINTERVAL TO_YMINTERVAL TRUNC(data) TZ_OFFSET Converso ASCIISTR BIN_TO_NUM CAST CHARTOROWID COMPOSE CONVERT DECOMPOSE HEXTORAW NUMTODSINTERVAL NUMTOYMINTERVAL RAWTOHEX RAWTONHEX RAWIDTOCHAR RAWIDTONCHAR SCN_TO_TIMESTAMP

TIMESTAMP_TO_SCN TO_BINARY_DOUBLE TO_BINARY_FLOAT TO_CHAR(caracter) TO_CHAR(data/hora) TO_CHAR(numero) TO_CLOB TO_DATE TO_DSINTERVAL TO_LOB TO_MULTI_BYTE TO_NCHAR(data/hora) TO_NCHAR(numero) TO_NCLOB TO_NUMBER TO_DSINTERVAL TO_SINGLE_BYTE TO_TIMESTAMP TO_TIMESTAMP_TZ TO_YMINTERVAL TRANSLATE USING UNISTR Coleo CARDINALITY COLLECT POWERMULTISET POWERMULTISET_BY_CARDINALITY SET Variadas BFILENAME COALESCE CV DECODE DEPTH DUMP EMPTY_BLOB, EMPTY_CLOB EXISTSNODE EXTRACT(XML) EXTRACTVALUE GREATES LEAST LNNVL NLS_CHARSET_DECL_LEN NLS_CHARSET_ID NLS_CHARSET_NAME NULLIF NVL

NVL2 ORA_HASH PATH PRESENTNNV PRESENTV PREVIOUS SYS_CONNECT_BY_PATH SYS_CONTEXT SYS_DBURIGEN SYS_EXTRACT_UTC SYS_GUID SYS_TYPEID SYS_XMLAGG SYS_XMLGEN UID UPDATEXML USER USERENV VSIZE XMLAGG XMLCOLATTVAL XMLCONCAT XMLFOREST XMLSEQUENCE XMLTRANSFORM

Funes de agregao (ou agregadas)


Funes de grupo

AVG COLLECT CORR CORR_* COUNT COVAR_POP COVAR_SAMP CUME_DIST DENSE_RANK FIRST GROUP_ID GROUPING GROUPING_ID LAST MAX MEDIAN MIN PERCENTILE_CONT PERCENTILE_DISC PERCENT_RANK

RANK REGR_Funes (Regresso Linear) STATS_CROSSTAB STATS_F_TEST STATS_KS_TEST STATS_MODE STATS_MW_TEST STATS_ONE_WAY_ANOVA STATS_T_TEST_* STATS_WSR_TEST STDDEV STDDEV_POP STDDEV_SAMP SUM VAR_POP VAR_SAMP VARIANCE

Funes de Referncia a Objeto


DEREF MAKE_REF REF REFTOHEX VALUE

Funes Modelo
CV ITERATION_NUMBER PRESENTNNV PRESENTV PREVIOUS

Funes Analticas
As funes analticas so utilizadas principalmente para por exemplo a extrao de dados gerenciais na base de dados. O Oracle o banco que mais possui dessas funes, mas muitos SGBDs atuais j contm essas funes disponveis em suas novas verses. Vamos dar um exemplo para utilizar essas funes: Imagine que voc tenha um sistema de cobrana na sua empresa. Seus recebimentos so baseados em contratos, ou seja, todos os meses voc realiza vendas e, como as vendas so financiadas, voc tem um fluxo freqente de parcelas. Voc recebe a seguinte misso do diretor financeiro: preciso saber quais so os contratos com os maiores valores de prestao a cada ms. Seria relativamente simples oferecer esta resposta caso o diretor no tivesse includo contratos na frase. Saber o valor das prestaes a cada ms muito simples.

Para resolver este problema, voc precisar utilizar a partcula OVER do comando SELECT. Com esta opo possvel, alm de extrair dados sumarizados, mostrar as linhas analticas (detalhe) ao mesmo tempo. Ao utilizar o OVER voc poder estabelecer uma quebra (ou particionamento) para sua anlise. Veja no comando a seguir:

Cdigo:
SELECT to_char( dtvenc, MM-YYYY) dtvenc, cdcontr, MAX( vlprest ) OVER (PARTITION BY to_char(dtvenc,YYYYMM)) max_prest, vlprest FROM vRECEBER WHERE dtvenc > sysdate; O destaque mostra a atuao da funo de grupo (MAX) e do particionamento da pesquisa (OVER). Neste caso, est sendo mostrado o maior valor de prestao de cada ms. Este resultado ser mostrado na coluna MAX_PREST. O resultado pode ser observado na imagem abaixo:

Outro ponto que merece destaque a possibilidade de mostrarmos os dados analticos (VLPREST, CDCONTR e DTVENC) ao mesmo tempo que trabalhamos o maior valor do ms (MAX_PREST). Desta forma possvel observarmos quais so os contratos, os valores originais das prestaes e o maior valor daquele ms. Naturalmente no exatamente isto que o diretor pediu Ele quer apenas o maior valor do ms e qual o contrato. Podemos notar que o maior valor do ms 10/2006 o contrato 56 cujo valor R$ 695,09 (alis, o nico contrato deste ms). J nos meses seguintes nota-se que o maior valor do ms 11/2006 R$ 11.452,35 do contrato 33. E assim sucessivamente. Para oferecermos apenas o resultado esperado pelo diretor, precisamos ir alm no nosso comando:

Cdigo:
SELECT dtvenc, cdcontr, vlprest FROM (SELECT to_char( dtvenc, MM-YYYY) dtvenc, cdcontr, MAX( vlprest ) OVER (PARTITION BY to_char(dtvenc,YYYYMM)) max_prest, vlprest FROM vRECEBER WHERE dtvenc > sysdate ) WHERE vlprest = max_prest; Ao se utilizar a subquery na clusula FROM, pode-se extrair somente as linhas que interessam, ou seja, aqueles contratos e prestaes que tm o maior valor de prestao a cada ms (comparao do MAX_PREST e do VLPREST) na segunda clusula WHERE. O resultado pode ser visto na imagem abaixo:

Podem-se utilizar diversos particionamentos em uma nica busca e tambm h outras funes de grupo para se utilizar com a partcula OVER, mas isso fica por sua conta. Bom por enquanto isso. Com o passar do temp vou escrevendo as descries de cada funo.

Você também pode gostar