Existe maneira de usar o LIKE num campo LONG?

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva,

Preciso de pesquisar strings dentro de um campo LONG ou seja, fazer um select usando o LIKE.

É possivel fazer isso num campo LONG?


Desde já obrigado
Avatar do usuário
fsitja
Rank: OraSauro
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

Não é possível, disparando um erro ORA-00932.

Inclusive é recomendado que não se use mais tipos LONG nas novas versões do Oracles pois esse será descontinuado. Substitua por BLOB se for viável e o VARCHAR2 não atendê-lo.

http://www.techonthenet.com/oracle/errors/ora00932.php
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Só pra complementar:
BLOB - para binários
CLOB - para caracteres

:-o
Avatar do usuário
fsitja
Rank: OraSauro
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

oh yeah, faz de conta que foi typo! :roll:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Lembre-se que na DBMS_LOB tem algumas funções que podem ajudar, como DBMS_LOB.INSTR, DBMS_LOB.SUBSTR...

Essas podem "simular" um LIKE...
lopes_andre
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Seg, 13 Out 2008 9:01 am
Localização: Lisboa

Viva de novo.

Passei o campo LONG para CLOB de forma a conseguir utilizar o like, mas agora necessitava de alterar de novo para LONG e não estou a conseguir.

A pergunta, existe maneira de passar um campo de CLOB para LONG?


Desde já obrigado.


Cumprimentos.
Avatar do usuário
NightSpy
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 49
Registrado em: Ter, 09 Set 2008 4:18 pm
Localização: SP

Andre, não conseguiu transformar para varchar2?? acho que seria mais viável.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Fazer o Alter retornando creio não ser possível mesmo. Realizei uns testes aqui e não consegui.

Criá-lo como Long (Estou utilizando versão 9i) é possível sim, porém, depois de alterado, não consegue voltar ao datatype original.

Talvez seja alguma Feature da Oracle, que não permite mais utilizar este tipo de Dado em algumas versões de banco (precisaria dar uma pesquisada com mais calma).

Mas, pra ter essa certeza, fiz os testes abaixo:

Selecionar tudo

CREATE TABLE teste (cod NUMBER(10), descricao LONG);

SELECT *
FROM teste;

ALTER TABLE teste MODIFY descricao CLOB;

SELECT *
FROM teste;


ALTER TABLE teste MODIFY descricao LONG;

-- ORA-22859: invalid modification of columns
Uma dica: Não sei da tua estrutura e da complexidade da tua tabela, mas, se OBRIGATÓRIAMENTE precisar deste tipo de dado novamente (conforme informado pelo Dr_Gori, se outros DATATYPES não satisfazer tua necessidade), dê um DROP na tua tabela (guardando as informações antes) e a recrie com este Datatype que provavelmente conseguirá.

Caso não possa dar um Drop na tabela, crie mais uma coluna nesta tabela, do tipo LONG, dê um Update dos valores do CLOB pro campo LONG e, depois drop essa coluna CLOB.

Fica ai a dica brother.

Qualquer coisa, manda ai pra gente.
GuGatto
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 30 Out 2019 3:07 pm
Localização: Campinas/SP

Você pode criar uma função para converter o campo.

Selecionar tudo

CREATE OR REPLACE FUNCTION get_search_condition
(
  p_owner           all_constraints.owner%TYPE,
  p_constraint_name all_constraints.constraint_name%TYPE
) RETURN VARCHAR2 IS
  v_long LONG;
BEGIN
  SELECT search_condition
  INTO   v_long
  FROM   all_constraints
  WHERE  constraint_name = p_constraint_name
  AND    owner = p_owner
  AND    constraint_type = 'C';

  RETURN substr(v_long, 1, 32760);
END;
Depois usá-la na query:

Selecionar tudo

SELECT constraint_name,
       get_search_condition(owner, constraint_name) AS search_condition
FROM   all_constraints
WHERE  owner = 'MYSCHEMA'
AND    table_name = 'MYTABLENAME'
AND    constraint_type = 'C'
AND    get_search_condition(owner, constraint_name) = 'TEXT_SEARCH';
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 11 visitantes