Boa tarde pessoal!
Tenho uma dúvida com relação a um uso do operador in numa proc que fiz...
Tenho uma variavel X varchar2(20);
Nela faço vários IFs que vão inserindo os produtos que um usuário digita pra gerar um relatório. Que no fim pode ficar assim: Ex:00001, 00002
X=00001, 00002
Depois verifico com outro If (produto1 IN X) then ....
Minha dúvida é se tem como eu verificar o X com o operador IN ele busca o produto 00001 dentro dela por exemplo.
Dúvida com Operador IN
-
- Rank: Programador Pleno
- Mensagens: 33
- Registrado em: Qua, 17 Fev 2010 6:30 am
- Localização: Americana
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Se entendi, seria para pesquisar na string se há ocorrência do parâmetro dentro de uma lista separada por vírgulas, certo?
Um jeito seria assim:
Já é feita validação da lista para que não pegue substrings que não estejam entre duas vírgulas (a menos que esteja no início ou final da string).
Um jeito seria assim:
Connected to Oracle Database 11g Enterprise Edition Release 11.1.0.6.0
Connected as fsitja
SQL>
SQL> set serveroutput on
SQL> declare
2 x varchar2(4000);
3 busca varchar2(10);
4 begin
5 x := '00001, 00002, 00003, 00005';
6 busca := '00002';
7 if regexp_like(ltrim(rtrim(x)), '(^|,) *' || busca || '(,|$) *')
8 then
9 dbms_output.put_line('Achou!');
10 else
11 dbms_output.put_line('Não Achou!');
12 end if;
13 end;
14 /
Achou!
PL/SQL procedure successfully completed
-
- Rank: Analista Júnior
- Mensagens: 99
- Registrado em: Qui, 02 Ago 2007 3:06 pm
- Localização: sp
Érico Balboa
A pergunta mais cretina é aquela que não é feita
A pergunta mais cretina é aquela que não é feita
Fiz um código pra testar, pelo teste dá certo sim, confere ai:
Criação da Tabela
Teste Prático
Se for bem isso q você quer, hehehehe.....abs
Criação da Tabela
CREATE GLOBAL TEMPORARY TABLE TABELA_GENERICA
(
CHAR01 VARCHAR2(4000),
CHAR02 VARCHAR2(4000)
)
ON COMMIT PRESERVE ROWS;
DECLARE
X VARCHAR2(30);
X2 VARCHAR2(30);
BEGIN
DELETE TABELA_GENERICA WHERE CHAR02 = 'TESTE';
INSERT INTO TABELA_GENERICA (CHAR01,CHAR02) VALUES (1,'TESTE');
INSERT INTO TABELA_GENERICA (CHAR01,CHAR02) VALUES (2,'TESTE');
INSERT INTO TABELA_GENERICA (CHAR01,CHAR02) VALUES (3,'TESTE');
FOR V IN (SELECT CHAR01 FROM TABELA_GENERICA WHERE CHAR02 = 'TESTE') LOOP
X := X||V.CHAR01||',';
END LOOP;
X := SUBSTR(X,1,LENGTH(X)-1);
FOR V IN (SELECT CHAR01 FROM TABELA_GENERICA WHERE CHAR01 IN (X)) LOOP
X2 := X2||V.CHAR01||',';
END LOOP;
DBMS_OUTPUT.PUT_LINE(X);
DBMS_OUTPUT.PUT_LINE(X2);
END;
-
- Rank: Programador Pleno
- Mensagens: 33
- Registrado em: Qua, 17 Fev 2010 6:30 am
- Localização: Americana
Ok pessoal vou testar o código sim....
Obrigado...
Obrigado...
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante