Você está na página 1de 30

Faculdade Impacta Tecnologia

Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Suporte a Expressões Comuns

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no
Faculdade Impacta Tecnologia

Objetivos
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Ao concluir esta lição, você será capaz de:


• Listar as vantagens do uso de expressões comuns
• Usar expressões comuns para pesquisar, estabelecer
correspondência e substituir strings

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
Objetivos
a mp ble lic
i u sS
Nesta lição, você aprenderá
f e raa usar o recurso de suporte a expressões comuns. O suporte a
iccomuns está
s disponível em SQL e PL/SQL.
Vin n-tran
expressões

no

Oracle Database 11g: Fundamentos de SQL II 7 - 2


Faculdade Impacta Tecnologia

Agenda da Lição
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Introdução a expressões comuns


• Usando metacaracteres com expressões comuns
• Usando as functions de expressões comuns
– REGEXP_LIKE
– REGEXP_REPLACE
– REGEXP_INSTR
– REGEXP_SUBSTR
• Acessando subexpressões a
• Usando a function REGEXP_COUNT ) has
• Expressões comuns e constraints de verificação l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 7 - 3


Faculdade Impacta Tecnologia

O que São Expressões Comuns?


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• As expressões comuns são usadas para pesquisar


(e manipular) padrões simples e complexos nos dados
de string usando convenções de sintaxe padrão.
• Você pode usar um conjunto de functions e condições
SQL para pesquisar e manipular strings em SQL e
PL/SQL.
• É possível especificar uma expressão comum usando:
– Metacaracteres, que são operadores que especificam os
a
algoritmos de pesquisa
) h as
– Literais, que são os caracteres para os quais você pesquisa
m ฺ
i l ฺ co uide
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a lice
p
O que São Expressões
S am able
Comuns?

i c
s fornece
O Oracle Database
iuPOSIX s f er suporte para expressões comuns. A implementação é compatível

V i n tran
com o padrão (Portable Operating System for UNIX), controlado pelo IEEE (Institute of
Electrical and-Electronics Engineers), para semântica e sintaxe de correspondência de dados
onrecursos
ASCII.nOs multilíngues Oracle estendem os recursos de correspondência dos
operadores além do padrão POSIX. As expressões comuns são um método de descrever padrões
simples e complexos para pesquisa e manipulação.
A manipulação e a pesquisa de strings contribuem com uma grande porcentagem da lógica em
uma aplicação baseada na Web. O uso engloba tarefas simples, como localização da palavra
“San Francisco” em um texto especificado, complexas, na extração de todas as URLs do texto, e
até mais complexas, como localização de todas as palavras cujo segundo caractere seja uma
vogal.
Quando associado a SQL nativo, o uso de expressões comuns permite operações de pesquisa e
manipulação muito avançadas em todos os dados armazenados em um banco de dados Oracle.
Você pode usar esse recurso para solucionar facilmente problemas que, de outra forma,
envolveriam programação complexa.

Oracle Database 11g: Fundamentos de SQL II 7 - 4


Faculdade Impacta Tecnologia

Vantagens do Uso de Expressões Comuns


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

As expressões comuns permitem implementar lógica de


correspondência complexa no banco de dados com as seguintes
vantagens:
• Ao centralizar a lógica de correspondência no Oracle
Database, você evita processamento intenso de string
de conjuntos de resultados de SQL por aplicações de
middle-tier.
• Com o uso de expressões comuns no servidor para impor
constraints, você elimina a necessidade de codificar a lógica a
de validação de dados no cliente. ) has
• As functions e condições de expressão comum delฺc ome ideฺ
SQL
PL/SQL incorporadas tornam as manipulações m adei string
t G umais
g
@ udedo
eficientes e fáceis do que nas releasesoanteriores n Oracle
a i t
Database 10g. mp s S s a t h i
l
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
p e licComuns
Vantagens do Uso de
a mExpressões
l
As expressões s S sãoraumbcomponente
comuns de processamento de texto muito eficiente de
i c s e como PERL e Java.
iuprogramação
f
V i n tran
linguagens de Por exemplo, um script PERL pode processar

onas- expressões comuns para pesquisar URLs na string. Um motivo para muitos
cada arquivo HTML em um diretório, ler seu conteúdo em uma variável escalar como uma única
string enusar
desenvolvedores criarem em PERL é que ele tem uma funcionalidade de correspondência de
padrão avançada. O suporte a expressões comuns do Oracle permite que os desenvolvedores
implementem a lógica de correspondência complexa no banco de dados. Essa técnica é útil pelos
seguintes motivos:
• Ao centralizar a lógica de correspondência no Oracle Database, você evita processamento
intenso de strings de conjuntos de resultados de SQL por aplicações middle-tier. As
functions de expressão comum SQL aproximam a lógica de processamento dos dados,
fornecendo uma solução mais eficiente.
• Antes do Oracle Database 10g, os desenvolvedores frequentemente codificavam a lógica de
validação dos dados no cliente, exigindo que a mesma lógica de validação fosse duplicada
para vários clientes. O uso de expressões comuns no servidor para impor constraints
soluciona esse problema.
• As functions e condições de expressões comuns de SQL e PL/SQL incorporadas tornam as
manipulações de string mais eficientes e menos difíceis do que nas releases anteriores do
Oracle Database 10g.
Oracle Database 11g: Fundamentos de SQL II 7 - 5
Faculdade Impacta Tecnologia

Usando Functions e Condições de Expressões


Comuns em SQL e PL/SQL
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Nome de Function ou Descrição


Condição
REGEXP_LIKE É semelhante ao operador LIKE, mas executa
correspondência de expressão comum em vez de
correspondência de padrão simples (condição)

REGEXP_REPLACE Pesquisa um padrão de expressão comum e o


substitui por uma string de substituição

REGEXP_INSTR Pesquisa uma string de um padrão de expressão


comum e retorna a posição em que a correspondência
foi localizada s a
)h ฺa
Pesquisa um padrão de expressão comum emm uma
REGEXP_SUBSTR
i l ฺ co uide
determinada string e extrai a substring correspondente
g ma nt G
i o@ u e
dcorrespondência
REGEXP_COUNT a
Retorna o número de vezes
p em uma t
que uma
S
s a m
de padrão é localizada
t h i s string de entrada

i u sl use
c
ini e to
o ( v
Copyright © 2009, Oracle. Todos os direitos reservados.
s
a i e n
c Expressões Comuns em SQL e PL/SQL
Usando Functions e m p e lide
Condições
a l
b conjunto de functions SQL que você usa para pesquisar e
O Oracle Database
i u s Sfornecee r a
um
manipular
i n n sf expressões comuns. Essas functions podem ser usadas em um literal de
icstringsausando
V variável
texto,
o n -tder bind ou qualquer coluna que mantenha os dados de caractere como CHAR,
NCHAR, n CLOB, NCLOB, NVARCHAR2 e VARCHAR2 (mas não LONG). Uma expressão comum
deve estar entre aspas simples. Isso assegura que a expressão inteira seja interpretada pela
function SQL e melhore a legibilidade de seu código.
REGEXP_LIKE: Essa condição pesquisa um padrão em uma coluna de caracteres. Use essa
condição na cláusula WHERE de uma consulta para retornar linhas que correspondam à
expressão comum que você especificar.
REGEXP_REPLACE: Esta function pesquisa um padrão em uma coluna de caracteres e substitui
cada ocorrência desse padrão pelo padrão que você especificar.
REGEXP_INSTR: Esta function pesquisa uma string em busca de uma ocorrência de um padrão
de expressão comum. Você especifica a ocorrência que deseja localizar e a posição inicial da
pesquisa. Esta function retorna um valor inteiro que indica a posição na string em que a
correspondência foi localizada.
REGEXP_SUBSTR: Esta function retorna a substring que corresponde ao padrão da expressão
comum que você especificar.
REGEXP_COUNT: Esta function retorna o número de vezes que a correspondência de um padrão
é localizada na string de entrada.
Oracle Database 11g: Fundamentos de SQL II 7 - 6
Faculdade Impacta Tecnologia

Agenda da Lição
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Introdução a expressões comuns


• Usando metacaracteres com expressões comuns
• Usando as functions de expressões comuns
– REGEXP_LIKE
– REGEXP_REPLACE
– REGEXP_INSTR
– REGEXP_SUBSTR
• Acessando subexpressões a
• Usando a function REGEXP_COUNT ) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 7 - 7


Faculdade Impacta Tecnologia

O que São Metacaracteres?


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Metacaracteres são caracteres especiais que possuem um


significado especial, como um curinga, um caractere de
repetição, um caractere sem correspondência ou um
intervalo de caracteres.
• Você pode usar vários símbolos de metacaracteres
predefinidos na correspondência de padrão.
• Por exemplo, a expressão comum ^(f|ht)tps?:$
pesquisa o seguinte no início da string:
a
– Os literais f ou ht
) h as
– O literal t
l ฺ c om ideฺ
– i G
O literal p, que também pode ser seguido peloaliteral s u
m t
– @g en
O literal dois-pontos “:” no final da string
p aio Stud
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
mp ble lic
O que São Metacaracteres?
a
A expressão u
i s S nofeslide
comum ra corresponde às strings http:, https:, ftp:, and ftps: .
inic -Para
Observação:
V t r
s uma lista completa de metacaracteres de expressões comuns, consulte o
anobter
non
Oracle Database Advanced Application Developer’s Guide 11g Release 1 (11.1)

Oracle Database 11g: Fundamentos de SQL II 7 - 8


Faculdade Impacta Tecnologia

Usando Metacaracteres com Expressões Comuns


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Sintaxe Descrição
. Corresponde a qualquer caractere no conjunto de caracteres suportados,
exceto NULL

+ Corresponde a uma ou mais ocorrências

? Corresponde a uma ou nenhuma ocorrência

* Corresponde a nenhuma ou mais ocorrências da subexpressão anterior

{m} Corresponde a exatamente m ocorrências da expressão anterior

{m, } Corresponde a pelo menos m ocorrências da subexpressão anterior

{m,n} Corresponde a pelo menos m, mas não mais do que n ocorrências da


s a
subexpressão anterior a
)h ฺ
Corresponde a qualquer caractere simples da lista entre colchetes m
[…]
i l ฺ co uide
| Corresponde a uma das alternativas
g ma nt G
( ... ) Trata a expressão entre parênteses como uma i o@unidade. Ad
u e
subexpressão
p a
pode ser uma string de literais ou uma expressão t
complexa
S contendo

am this
operadores.
l s
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a lic de Expressões Comuns
Usando Metacaracteres
a mpembFunctions
l e
i u s S “fe. r”a: a.b corresponde às strings abb, acb e adb, mas não acc.
Qualquer caractere,
ic “ +a”n: sa+ corresponde às strings a, aa e aaa, mas não a bbb.
Um ouinmais,
V
Nenhumo n
ou -tr “ ? ”: ab?c corresponde às strings abc e ac, mas não a abbc.
um,
n
Nenhum ou mais, “ * ”: ab*c corresponde às strings ac, abc e abbc, mas não corresponde a
abb.
Contagem exata, “ {m} ”: a{3} corresponde às strings aaa, mas não a aa.
Contagem mínima ,“ {m,} ”: a{3,} corresponde às strings aaa e aaaa, mas não aa.
Contagem entre, “ {m,n} ”: a{3,5} corresponde às strings aaa, aaaa e aaaaa, mas não a
aa.
Lista de caracteres correspondentes, “ […] ”: [abc] corresponde ao primeiro caractere nas
strings all, bill e cold, mas não a qualquer caractere em doll.
Ou, “ | ”: a|b corresponde ao caractere a ou caractere b.
Subexpressão, “ (…) ”:(abc)?def corresponde à string opcional abc, seguida por def. A
expressão corresponde a abcdefghi e def, mas não a ghi. A subexpressão pode ser uma
string de literais ou uma expressão complexa contendo operadores.

Oracle Database 11g: Fundamentos de SQL II 7 - 9


Faculdade Impacta Tecnologia

Usando Metacaracteres com Expressões Comuns


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Sintaxe Descrição
^ Corresponde ao início de uma string

$ Corresponde ao final de uma string

\ Trata o metacaractere subsequente na expressão como um literal

\n Corresponde à enésima (1–9) subexpressão anterior a qualquer valor


agrupado entre parênteses. Os parênteses fazem com que uma expressão
seja lembrada; há uma backreference (referência anterior) para essa
expressão.

\d Um caractere de dígito s a
a
)h ฺ
m
[:class:] Corresponde a qualquer caractere pertencente à classe de caracteres
co uide
POSIX especificada
i l ฺ
a t Gentre os
g m
@ uden
[^:class:] Corresponde a qualquer caractere simples que não estiver na lista
colchetes
i o
m pa is St
s l sa e th
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a Functions e
p l i c
Usando Metacaracteres
S am able
em de Expressões Comuns (continuação)
Início/fim de âncora
i u r “ ^ ” e “$”: ^def corresponde a def na string defghi, mas
s dafelinha,
não a def
i n icem abcdef.
a ns def$ corresponde a def na string abcdef , mas não a def na
V n-
string defghi. t r
n o
Caractere de Escape “ \ ”: \+ procura um +. Ele corresponde ao sinal de mais na string
abc+def, mas não a Abcdef.
Backreference (referência anterior), “ \n ”:(abc|def)xy\1 corresponde às strings
abcxyabc e defxydef, mas não a abcxydef ou abcxy. Uma backreference (referência
anterior) permite pesquisar uma string repetida sem que você saiba a string com antecedência.
Por exemplo, a expressão ^(.*)\1$ corresponde a uma linha que consiste em duas instâncias
adjacentes da mesma string.
Caractere de dígito, “\d”: A expressão ^\[\d{3}\] \d{3}-\d{4}$ corresponde a [650] 555-1212,
mas não a 650-555-1212.
Classe de caractere, “ [:class:] ” : [[:upper:]]+ procura um ou mais caracteres
maiúsculos consecutivos. Corresponde a DEF na string abcDEFghi, mas não à string
abcdefghi.
Lista de caracteres sem correspondência (ou classe), “ [^...] ” : [^abc] corresponde ao
caractere d na string abcdef, mas não a a, b ou c.

Oracle Database 11g: Fundamentos de SQL II 7 - 10


Faculdade Impacta Tecnologia

Agenda da Lição
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Introdução a expressões comuns


• Usando metacaracteres com expressões comuns
• Usando as functions de expressões comuns
– REGEXP_LIKE
– REGEXP_REPLACE
– REGEXP_INSTR
– REGEXP_SUBSTR
• Acessando subexpressões a
• Usando a function REGEXP_COUNT ) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 7 - 11


Faculdade Impacta Tecnologia

Functions e Condições de Expressões


Comuns: Sintaxe
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

REGEXP_LIKE (source_char, pattern [,match_option]

REGEXP_INSTR (source_char, pattern [, position


[, occurrence [, return_option
[, match_option [, subexpr]]]]])

REGEXP_SUBSTR (source_char, pattern [, position


[, occurrence [, match_option
[, subexpr]]]])
a
has
REGEXP_REPLACE(source_char, pattern [,replacestr
[, position [, occurrence )
[, match_option]]]])
l ฺ c om ideฺ
m ai t Gu
REGEXP_COUNT (source_char, pattern [, position
@ g en
p ai Stud
[, occurrence [, match_option]]])
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a lic Comuns: Sintaxe
Functions e Condições
a mpdebExpressões
l e
s S fee condições
A sintaxe dasufunctions
i ra das expressões comuns é a seguinte:
• i c
in -trUma
source_char: s
an expressão comum,
Uma expressão de caractere que funciona como valor de pesquisa
Vpattern: uma literal de texto
non

• occurrence: Um valor inteiro positivo que indica qual ocorrência de padrão no
source_char o Oracle Server deve pesquisar. O default é 1.
• position: Um valor inteiro positivo que indica o caractere de source_char no qual o
Oracle Server deve começar a pesquisar. O default é 1.
• return_option:
- 0: Retorna a posição do primeiro caractere da ocorrência (default)
- 1: Retorna a posição do caractere após a ocorrência
• Replacestr: Padrão de substituição de caracteres em uma string
• match_parameter:
- “ c ”: Usa correspondência que faz distinção entre maiúsculas e minúsculas (default)
- “ i ”: Usa correspondência sem distinção entre maiúsculas e minúsculas
- “ n ”: Permite o operador de correspondência de qualquer caractere
- “ m ”: Trata a string de origem como várias linhas
• subexpr: Fragmento de padrão incluído entre parênteses. Você aprenderá mais sobre as
subexpressões posteriormente nesta lição.

Oracle Database 11g: Fundamentos de SQL II 7 - 12


Faculdade Impacta Tecnologia

Executando uma Pesquisa Básica


com a Condição REGEXP_LIKE
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

REGEXP_LIKE(source_char, pattern [, match_parameter ])

SELECT first_name, last_name


FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$');

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a Básica ecom a Condição REGEXP_LIKE
p l i c
Executando uma Pesquisa
S am able
REGEXP_LIKE
i u s fer à condição LIKE, exceto pelo fato de REGEXP_LIKE executar a
é semelhante
i n ic adanexpressão
correspondência s comum, e não a correspondência padrão simples executada por
V t r
- avalia strings usando caracteres conforme definido pelo conjunto de
LIKE. A condição
noden entrada.
caracteres
Exemplo de REGEXP_LIKE
Nesta consulta, na tabela EMPLOYEES, todos os funcionários de nome Steven ou Stephen são
exibidos. Na expressão usada,
'^Ste(v|ph)en$'
• ^ indica o início da expressão
• $ indica o fim da expressão
• | indica ou

Oracle Database 11g: Fundamentos de SQL II 7 - 13


Faculdade Impacta Tecnologia

Substituindo Padrões com


a Function REGEXP_REPLACE
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

REGEXP_REPLACE(source_char, pattern [,replacestr


[, position [, occurrence [, match_option]]]])

SELECT REGEXP_REPLACE(phone_number, ‘\.',‘-') AS phone


FROM employees;

Original Resultados parciais


a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a lic REGEXP_REPLACE
p a eFunction
Substituindo Padrões
a mcom b l
Usando a function
i u s SREGEXP_REPLACE,
f e r a você pode reformatar o número de telefone para

V i nico ponto
substituir
t r a nsdelimitador com um traço (-) delimitador. A seguir é apresentada uma
(.)
explicação nde-cada um dos elementos usados no exemplo da expressão comum:
no
• phone_number é a coluna de origem.
• ‘\.’ é o padrão de pesquisa.
- Use aspas simples (‘ ’) para pesquisar o ponto de caractere literal (.).
- Use uma barra invertida (\) para pesquisar um caractere normalmente tratado como um
metacaractere.
• ‘-’ é a string de substituição.

Oracle Database 11g: Fundamentos de SQL II 7 - 14


Faculdade Impacta Tecnologia

Localizando Padrões com


a Function REGEXP_INSTR
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

REGEXP_INSTR (source_char, pattern [, position [,


occurrence [, return_option [, match_option]]]])

SELECT street_address,
REGEXP_INSTR(street_address,'[[:alpha:]]') AS
First_Alpha_Position
FROM locations;

s a
)h ฺa
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
Localizando Padrõesm paa Function
com l i ce REGEXP_INSTR
a able
Neste exemplo,sa S functionrREGEXP_INSTR é usada para pesquisar o endereço para localizar o
primeiro
i u f
c analfabético,
icaractere s e sem considerar se está em maiúscula ou minúscula. Observe que
V i n t r
on-
[:<class>:] implica uma classe de caractere e corresponde a qualquer caractere dessa
classe; n
[:alpha:] corresponde a qualquer caractere alfabético. Os resultados parciais são
exibidos.
Na expressão usada na consulta '[[:alpha:]]':
• [ inicia a expressão.
• [:alpha:] indica a classe de caracteres alfabéticos.
• ] finaliza a expressão.
Observação: O operador de classe de caracteres POSIX permite pesquisar uma expressão em
uma lista de caracteres que seja membro de uma classe de caracteres POSIX específica. Você
pode usar esse operador para pesquisar formatação específica, como caracteres maiúsculos, ou
caracteres especiais como dígitos ou de pontuação. É suportado um conjunto completo de
classes de caracteres POSIX. Use a sintaxe [:class:] em que class é o nome da classe de
caracteres POSIX a ser pesquisada. A expressão comum a seguir pesquisa um ou mais caracteres
maiúsculos consecutivos: [[:upper:]]+ .

Oracle Database 11g: Fundamentos de SQL II 7 - 15


Faculdade Impacta Tecnologia

Extraindo Substrings
com a Function REGEXP_SUBSTR
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

REGEXP_SUBSTR (source_char, pattern [, position


[, occurrence [, match_option]]])

SELECT REGEXP_SUBSTR(street_address , ' [^ ]+ ') AS Road


FROM locations;

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
Extraindo Substringsmcom l i ce REGEXP_SUBSTR
pa a Function
a able
Neste exemplo,sosSnomes rde rodovias são extraídos da tabela LOCATIONS. Para fazer isso, o
i u
c coluna
ina s f e
conteúdo
V i n t r a nSTREET_ADDRESS após o primeiro espaço são retornados com o uso da
-
function REGEXP_SUBSTR. Na expressão usada na consulta ‘ [^ ]+ ’ :
nona expressão.
• [ inicia
• ^ indica NÃO.
• indica espaço.
• ] finaliza a expressão.
• + indica 1 ou mais.
• indica espaço.

Oracle Database 11g: Fundamentos de SQL II 7 - 16


Faculdade Impacta Tecnologia

Agenda da Lição
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Introdução a expressões comuns


• Usando metacaracteres com expressões comuns
• Usando as functions de expressões comuns
– REGEXP_LIKE
– REGEXP_REPLACE
– REGEXP_INSTR
– REGEXP_SUBSTR
• Acessando subexpressões a
• Usando a function REGEXP_COUNT ) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 7 - 17


Faculdade Impacta Tecnologia

Subexpressões
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Examine esta expressão:

(1 2 3)(4(5 6)(7 8))


As subexpressões são:

(1 2 3)(4(5 6)(7 8))

3 4 a
1 a s
2 m )h ฺ
i l ฺ co uide
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a lice
p
Subexpressões
S am able
O Oracle Database
iuNo r parâmetro de suporte a expressões comuns para acessar uma
s 11gfefornece
i c
n tran
subexpressão.
i s
exemplo do slide, uma string de dígitos é mostrada. Os parênteses identificam
V - na string de dígitos. Quando são lidas da esquerda para a direita e dos
as subexpressões
nonexternos para os internos, as subexpressões na string de dígitos são:
parênteses
1. 123
2. 45678
3. 56
4. 78
Você pode pesquisar qualquer uma dessas subexpressões com as functions REGEXP_INSTR e
REGEXP_SUBSTR.

Oracle Database 11g: Fundamentos de SQL II 7 - 18


Faculdade Impacta Tecnologia

Usando Subexpressões com Suporte a


Expressões Comuns
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

SELECT
REGEXP_INSTR
1 ('0123456789', -- source char or search value
2 '(123)(4(56)(78))', -- regular expression patterns
3 1, -- position to start searching
4 1, -- occurrence
5 0, -- return option
6 'i', -- match option (case insensitive)
7 1) -- sub-expression on which to search
s a
"Position"
)h ฺ a
FROM dual;
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a Suporte e
p l i c
Usando Subexpressões
S am ablecom a Expressões Comuns
REGEXP_INSTR
i u f e r
s e REGEXP_SUBSTR possuem um parâmetro SUBEXPR opcional que permite

V i ic substring
enfocarnuma
t r a nsespecífica da expressão comum que estiver sendo avaliada.
- slide, você pode pesquisar o primeiro padrão da subexpressão na lista de
non
No exemplo do
subexpressões. O exemplo identifica vários parâmetros para a function REGEXP_INSTR.
1. A string que você pesquisa foi identificada.
2. As subexpressões foram identificadas. A primeira subexpressão é 123. A segunda
subexpressão é 45678, a terceira é 56 e a quarta é 78.
3. O terceiro parâmetro identifica a posição de início da pesquisa.
4. O quarto parâmetro identifica a ocorrência do padrão que você deseja localizar. 1 significa
a primeira ocorrência.
5. O quinto parâmetro é a opção de retorno. Esta é a posição do primeiro caractere da
ocorrência. (Se você indicar 1, a posição do caractere seguinte à ocorrência será retornada.)
6. O sexto parâmetro identifica se sua pesquisa deve fazer distinção entre maiúsculas e
minúsculas.
7. O último parâmetro é o adicionado no Oracle Database 11g. Esse parâmetro indica qual
subexpressão você deseja localizar. No exemplo mostrado, você está pesquisando a
subexpressão, que é 123.

Oracle Database 11g: Fundamentos de SQL II 7 - 19


Faculdade Impacta Tecnologia

Por que Acessar a enésima Subexpressão?


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Um uso mais realista: Sequenciamento de DNA


• Talvez você precise localizar um subpadrão específico que identifique
uma proteína necessária para imunidade no DNA do rato.
SELECT
REGEXP_INSTR('ccacctttccctccactcctcacgttctcacctgtaaagcgtccctc
cctcatccccatgcccccttaccctgcagggtagagtaggctagaaaccagagagctccaagc
tccatctgtggagaggtgccatccttgggctgcagagagaggagaatttgccccaaagctgcc
tgcagagcttcaccacccttagtctcacaaagccttgagttcatagcatttcttgagttttca
ccctgcccagcaggacactgcagcacccaaagggcttcccaggagtagggttgccctcaagag
gctcttgggtctgatggccacatcctggaattgttttcaagttgatggtcacagccctgaggc
atgtaggggcgtggggatgcgctctgctctgctctcctctcctgaacccctgaaccctctggc
s a
taccccagagcacttagagccag', a
)h ฺ
'(gtc(tcac)(aaag))',
m
co uide
1, 1, 0, 'i',
i l ฺ
1) "Position"
g ma nt G
o@ tude
FROM dual;
a i
p is S
s a m th
s l e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o e
a Subexpressão?
p l i c
Por que Acessar a enésima
S am able
Em ciências u
i c i dadesvida, s f er seja de
talvez necessário extrair os deslocamentos de correspondências de

V i n tran
subexpressão uma sequência DNA para processamento adicional. Por exemplo, pode ser
necessário n - uma sequência de proteína específica, como o deslocamento inicial da
localizar
node DNA precedido por gtc e seguido por tcac seguido por aaag. Para alcançar
sequência
esse objetivo, você pode usar a function REGEXP_INSTR, que retorna a posição de localização
da correspondência.
No exemplo do slide, a posição da primeira subexpressão (gtc)é retornada. gtc aparece no
início da posição 195 da string de DNA.
Se você modificar o exemplo do slide para pesquisar a segunda subexpressão (tcac), a
consulta resultará na saída a seguir.tcac aparece no início da posição 198 da string de DNA.

Se você modificar o exemplo do slide para pesquisar a terceira subexpressão (aaag), a


consulta resultará na saída a seguir. aaag aparece no início da posição 202 da string de DNA.

Oracle Database 11g: Fundamentos de SQL II 7 - 20


Faculdade Impacta Tecnologia

REGEXP_SUBSTR: Exemplo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

SELECT
REGEXP_SUBSTR
1
('acgctgcactgca', -- source char or search value
2 'acg(.*)gca', -- regular expression pattern
3 1, -- position to start searching
4 1, -- occurrence
5 'i', -- match option (case insensitive)
6 1) -- sub-expression
"Value"
a
has
FROM dual;
)
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
Exemplo REGEXP_SUBSTR
a mp ble lic
No exemplo u S ra
dosslide:
i c i
1. acgctgcactgca n s feé a origem a ser pesquisada.
n
i -tra é o padrão a ser pesquisado. Localize acg seguido por gca com os
2.Vacg(.*)gca
non em potencial entre acg e gca.
caracteres
3. Comece pesquisando no primeiro caractere da origem.
4. Pesquise a primeira ocorrência do padrão.
5. Use correspondência sem distinção entre maiúsculas e minúsculas na origem.
6. Use o valor inteiro não negativo que identifique a enésima subexpressão a ser enfocada.
Esse é o parâmetro de subexpressão. Nesse exemplo, 1 indica a primeira subexpressão.
Você pode usar um valor de 0–9. Um zero significa que nenhuma subexpressão foi
enfocada. O valor padrão para este parâmetro é 0.

Oracle Database 11g: Fundamentos de SQL II 7 - 21


Faculdade Impacta Tecnologia

Agenda da Lição
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

• Introdução a expressões comuns


• Usando metacaracteres com expressões comuns
• Usando as functions de expressões comuns
– REGEXP_LIKE
– REGEXP_REPLACE
– REGEXP_INSTR
– REGEXP_SUBSTR
• Acessando subexpressões a
• Usando a function REGEXP_COUNT ) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 7 - 22


Faculdade Impacta Tecnologia

Usando a Function REGEXP_COUNT


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

REGEXP_COUNT (source_char, pattern [, position


[, occurrence [, match_option]]])

SELECT REGEXP_COUNT(
'ccacctttccctccactcctcacgttctcacctgtaaagcgtccctccctcatccccatgcccccttaccctgcag
ggtagagtaggctagaaaccagagagctccaagctccatctgtggagaggtgccatccttgggctgcagagagaggag
aatttgccccaaagctgcctgcagagcttcaccacccttagtctcacaaagccttgagttcatagcatttcttgagtt
ttcaccctgcccagcaggacactgcagcacccaaagggcttcccaggagtagggttgccctcaagaggctcttgggtc
tgatggccacatcctggaattgttttcaagttgatggtcacagccctgaggcatgtaggggcgtggggatgcgctctg
ctctgctctcctctcctgaacccctgaaccctctggctaccccagagcacttagagccag‘,
‘gtc’) AS Count
s a
FROM dual; a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a lice
p
am able
Usando a Function REGEXP_COUNT
S
i u s fer avalia strings usando caracteres como definido pelo conjunto de
A function REGEXP_COUNT

V nicde entrada.
caracteres
i t r a nsEla retorna um valor inteiro que indica o número de ocorrências do
padrão. Se n -
nenhuma correspondência for localizada, a function retornará 0.
no
No exemplo do slide, o número de ocorrências de uma substring de DNA é determinado com a
function REGEXP_COUNT.
O exemplo a seguir mostra que o número de vezes que o padrão 123 ocorre na string
123123123123 é três. A pesquisa começa na segunda posição da string.
SELECT REGEXP_COUNT
('123123123123', -- source char or search value
'123', -- regular expression pattern
2, -- position where the search should start
'i') -- match option (case insensitive)
As Count
FROM dual;

Oracle Database 11g: Fundamentos de SQL II 7 - 23


Faculdade Impacta Tecnologia

Expressões Comuns e Constraints


de Verificação: Exemplos
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

ALTER TABLE emp8


ADD CONSTRAINT email_addr
CHECK(REGEXP_LIKE(email,'@')) NOVALIDATE;

INSERT INTO emp8 VALUES


(500,'Christian','Patel','ChrisP2creme.com',
1234567890,'12-Jan-2004','HR_REP',2000,null,102,40);

s a
)h ฺa
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a licede Verificação: Exemplos
Expressões Comunsm epConstraints
Sa também a b le
As expressões s
i u comuns
f e r podem ser usadas nas constraints CHECK. Neste exemplo, a
V i nicCHECK
constraint
t r a s
énadicionada à coluna EMAIL da tabela EMPLOYEES. Isso assegura que
somente asn - contendo um símbolo “@” sejam aceitas. A constraint é testada. A constraint
strings
CHECKnéoviolada porque o endereço de e-mail não contém o símbolo necessário. A cláusula
NOVALIDATE assegura que os dados existentes não sejam verificados.
Para o exemplo do slide, a tabela emp8 é criada com o seguinte código:
CREATE TABLE emp8 AS SELECT * FROM employees;
Observação: O exemplo do slide é executado com a opção “Executar Instrução” no SQL
Developer. O formato de saída será diferente se você usar a opção “Executar Script”.

Oracle Database 11g: Fundamentos de SQL II 7 - 24


Faculdade Impacta Tecnologia

Quiz
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Com o uso de expressões comuns em SQL e PL/SQL, é


possível:
1. Evitar processamento intenso de string de conjuntos de
resultados de SQL por aplicações de middle-tier
2. Evitar a lógica de validação de dados no cliente
3. Impor constraints no servidor

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
Respostas: 1, 2, 3 mp
a lic
a l e
i u s S ferab
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 7 - 25


Faculdade Impacta Tecnologia

Resumo
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Nesta lição, você aprendeu a usar as expressões comuns


para pesquisar, estabelecer correspondência entre strings
e substituí-las.

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
v in e t
Copyright © 2009, Oracle. Todos os direitos reservados.
(
i o e n s
a
Resumo
a mp ble lic
i u sS
Nesta lição, você aprendeu
f e raa usar os recursos de suporte a expressões comuns. O suporte à
iccomum estás disponível em SQL e PL/SQL.
Vin n-tran
expressão

no

Oracle Database 11g: Fundamentos de SQL II 7 - 26


Faculdade Impacta Tecnologia

Exercício 7: Visão Geral


Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

Este exercício aborda o uso de functions de expressões


comuns para:
• Pesquisar, substituir e manipular dados
• Criar uma nova tabela CONTACTS e adicionar uma
constraint CHECK à coluna p_number para garantir que os
números de telefone sejam informados no banco de dados
em um formato padrão específico
• Testar a adição de alguns números de telefone à coluna
a
p_number com vários formatos as )h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l s a th
s e
i n iciu to us
(v nse
Copyright © 2009, Oracle. Todos os direitos reservados.

i o
a lice
p
Exercício 7: Visão Geral
S am able
i c ius você
Neste exercício,
s f er éusar
pode functions de expressões comuns para pesquisar, substituir e
manipular
V i n dados.
t r a n
Também possível criar uma nova tabela CONTACTS e adicionar uma
- à coluna p_number para garantir que os números de telefone sejam
constraint CHECK
nonno banco de dados em um formato padrão específico.
informados

Oracle Database 11g: Fundamentos de SQL II 7 - 27


Faculdade Impacta Tecnologia

Exercício 7
Neste exercício, você pode usar functions de expressões comuns para pesquisar, substituir e
manipular dados. Também é possível criar uma nova tabela de contatos e adicionar uma
constraint de verificação à coluna p_number para impor que os números de telefone sejam
informados no banco de dados em um formato padrão específico.
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

1. Crie uma consulta para pesquisar na tabela EMPLOYEES todos os funcionários cujos
nomes iniciem com “Ki” ou “Ko.”

2. Crie uma consulta que remova os espaços na coluna STREET_ADDRESS da tabela


LOCATIONS na tela. Use “Street Address” como cabeçalho da coluna.

s a
a
)h ฺ
m
co uide
i l ฺ
g ma nt G
a i o@ tude
m p is S
l
3. Crie uma consulta que exiba “St” substituído a th na coluna STREET_ADDRESS
s por “Street”
s e
s nenhuma linha que já contenha
da tabela LOCATIONS. Tome cuidado
i n i ciuparatonãouafetar
i o (v afetadas.
“Street”. Exiba somente as linhas
n se
pa e lic e
m
s Sa rabl
i c iu nsfe
n
i uma-trtabela
4.VCrie a de contatos e adicione uma constraint de verificação à coluna p_number
n
paraoimpor a seguinte máscara de formato a fim de garantir que os números de telefone
n
sejam informados no banco de dados no seguinte formato padrão: (XXX) XXX-XXXX. A
tabela deve conter as seguintes colunas:
- l_name varchar2(30)
- p_number varchar2 (30)

Oracle Database 11g: Fundamentos de SQL II 7 - 28


Faculdade Impacta Tecnologia

Exercício 7 (continuação)
5. Execute o script SQL lab_07_05.sql para inserir os seguintes sete números de
telefone na tabela de contatos. Quais números são adicionados?
l_name Column Value p_number Column Value
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

NULL ‘(650) 555-5555’


NULL ‘(215) 555-3427’
NULL ‘650 555-5555’
NULL ‘650 555 5555’
NULL ‘650-555-5555’
NULL ‘(650)555-5555’
NULL ‘ (650) 555-5555’

6. Crie uma consulta para localizar o número de ocorrências do padrão de DNA ctc
a
e minúsculas. ) has
na string gtctcgtctcgttctgtctgtcgttctg. Ignore a distinção entre maiúsculas

l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no

Oracle Database 11g: Fundamentos de SQL II 7 - 29


Faculdade Impacta Tecnologia
Unauthorized reproduction or distribution prohibitedฺ Copyright© 2013, Oracle and/or its affiliatesฺ

a
) has
l ฺ c om ideฺ
m ai t Gu
@ g en
p ai Stud
o
l s am this
i c ius o use
( v in e t
i o e n s
a
a mp ble lic
i u s S fera
ic s
Vin n-tran
no