Como Pegar parte de um campo LONG?
Boa tarde,
Preciso pegar parte de um campo do tipo LONG, pois o mesmo é muito grande.
Exemplo, mas que da erro:
SELECT SUBSTR(DESCRICAOCOMPLETA1,100) FROM CURSOS
No aguardo.
Preciso pegar parte de um campo do tipo LONG, pois o mesmo é muito grande.
Exemplo, mas que da erro:
SELECT SUBSTR(DESCRICAOCOMPLETA1,100) FROM CURSOS
No aguardo.
Marcoridolphi
Curtidas 0
Respostas
Claudia Nogueira
29/11/2012
Não sei se você colou aqui exatamente como estava fazendo, mas o 1 estava junto com o campo.
Se não for isso, posta o erro exato.
SELECT SUBSTR(DESCRICAOCOMPLETA,1,100) FROM CURSOS
Se não for isso, posta o erro exato.
GOSTEI 0
Marcoridolphi
29/11/2012
Desculpe,
Esse é o script
SELECT A.CHAPA, A.MES, A.ANO, SUBSTR(B.MENSAGEMERRO,1,100) AS TIPOLONG
FROM PFHSTPROV A
INNER JOIN PLOGFUNCIONARIO B ON B.EXECID = A.EXECIDFER
Abaixo o erro.
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
Esse é o script
SELECT A.CHAPA, A.MES, A.ANO, SUBSTR(B.MENSAGEMERRO,1,100) AS TIPOLONG
FROM PFHSTPROV A
INNER JOIN PLOGFUNCIONARIO B ON B.EXECID = A.EXECIDFER
Abaixo o erro.
ORA-00932: inconsistent datatypes: expected NUMBER got LONG
GOSTEI 0
Deivison Melo
29/11/2012
Já tentou dar um cast?
select a.chapa, a.mes, a.ano, substr(cast (b.mensagemerro as varchar),1,100) as tipolong
from pfhstprov a
inner join plogfuncionario b on b.execid = a.execidfer
select a.chapa, a.mes, a.ano, substr(cast (b.mensagemerro as varchar),1,100) as tipolong
from pfhstprov a
inner join plogfuncionario b on b.execid = a.execidfer
GOSTEI 0
Deivison Melo
29/11/2012
Tenta assim tb:
select a.chapa, a.mes, a.ano, substr(to_char(b.mensagemerro),1,100) as tipolong
from pfhstprov a
inner join plogfuncionario b on b.execid = a.execidfer
ou ainda dá uma olhada aqui!!
http://glufke.net/oracle/viewtopic.php?t=3905
http://itknowledgeexchange.techtarget.com/itanswers/how-to-convert-long-to-clob-or-to-varchar-type-in-select-statement/
Funções de conversão:
http://psoug.org/reference/convert_func.html
Ainda tem esse tópico abaixo:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:839298816582
select a.chapa, a.mes, a.ano, substr(to_char(b.mensagemerro),1,100) as tipolong
from pfhstprov a
inner join plogfuncionario b on b.execid = a.execidfer
ou ainda dá uma olhada aqui!!
http://glufke.net/oracle/viewtopic.php?t=3905
http://itknowledgeexchange.techtarget.com/itanswers/how-to-convert-long-to-clob-or-to-varchar-type-in-select-statement/
Funções de conversão:
http://psoug.org/reference/convert_func.html
Ainda tem esse tópico abaixo:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:839298816582
GOSTEI 0
Deivison Melo
29/11/2012
Ainda tem esse exemplo em bloco anônimo:
declare
t_char varchar2(20);
begin
for cr in (select long_desc from table) loop
t_char := substr(cr.long_desc,1,20);
dbms_output.put_line(t_char);
end loop;
end;
declare
t_char varchar2(20);
begin
for cr in (select long_desc from table) loop
t_char := substr(cr.long_desc,1,20);
dbms_output.put_line(t_char);
end loop;
end;
GOSTEI 0
Marcoridolphi
29/11/2012
Todos os tipos ja foram testados e dão os mesmos erro no anterior.
Agora sobre esses scripts enviados, tenho que mudar alguma coisa, ou executo como esta?
Agora sobre esses scripts enviados, tenho que mudar alguma coisa, ou executo como esta?
GOSTEI 0
Deivison Melo
29/11/2012
os dois primeiros eu coloquei da mesma forma q estava sua tabela apenas adicionando as funções de conversão!!
O bloco anônimo vc tem q trocar os campos dele pelos q está tentando converter...
Já leu todos os artigos e nenhum atendeu a vc?
O bloco anônimo vc tem q trocar os campos dele pelos q está tentando converter...
Já leu todos os artigos e nenhum atendeu a vc?
GOSTEI 0
Deivison Melo
29/11/2012
testei esse bloco nao vi erros...
DECLARE
vlong LONG := '43702198ryiwqeyr2q93741234h12iu34y1o2iu34y128734123iu421hiu3';
vvar VARCHAR2(32767);
BEGIN
vvar := vlong;
dbms_output.put_line('Varchar2: '||vvar);
END;
DECLARE
vlong LONG := '43702198ryiwqeyr2q93741234h12iu34y1o2iu34y128734123iu421hiu3';
vvar VARCHAR2(32767);
BEGIN
vvar := vlong;
dbms_output.put_line('Varchar2: '||vvar);
END;
GOSTEI 0
Marcoridolphi
29/11/2012
Amigão,
Me ajude no seguinte,
Esse select aqui que eu preciso ver:
SELECT MENSAGEMERRO as CAMPOLONG
FROM PLOGFUNCIONARIO
Pode me ajudar como fazer?
Me ajude no seguinte,
Esse select aqui que eu preciso ver:
SELECT MENSAGEMERRO as CAMPOLONG
FROM PLOGFUNCIONARIO
Pode me ajudar como fazer?
GOSTEI 0
Carlos Cavalcanti
29/11/2012
Prezados, bom dia.
Preciso extrair uma informação de uma consulta SQL. Segue...
" SELECT CD_ATENDIMENTO, DS_INFO_ATENDIMENTO
FROM ATENDIME_INFO
WHERE DS_INFO_ATENDIMENTO LIKE '%ELETIVA%' "
-- A COLUNA DS_INFO_ATENDIMENTO É DO TIPO LONG
Ao colocar a Cláusula acima, Oracle retorna que esperava CHAR e obteve LONG.
Como posso contornar o problema?
Detalhe:
Conteúdo da coluna DS_INFO_ATENDIMENTO possui a seguinte informação abaixo:
" INTERNAÇÃO
1) TIPO DE INTERNAÇÃO: ( ) ELETIVA ( X ) URGÊNCIA ( ) 1° HORÁRIO
2) PERFIL: ( X ) CLÍNICA ( ) CIRÚRGICA ( ) OBSTÉTRICA
3) TUSS: 00021010X1
... "
Preciso extrair uma informação de uma consulta SQL. Segue...
" SELECT CD_ATENDIMENTO, DS_INFO_ATENDIMENTO
FROM ATENDIME_INFO
WHERE DS_INFO_ATENDIMENTO LIKE '%ELETIVA%' "
-- A COLUNA DS_INFO_ATENDIMENTO É DO TIPO LONG
Ao colocar a Cláusula acima, Oracle retorna que esperava CHAR e obteve LONG.
Como posso contornar o problema?
Detalhe:
Conteúdo da coluna DS_INFO_ATENDIMENTO possui a seguinte informação abaixo:
" INTERNAÇÃO
1) TIPO DE INTERNAÇÃO: ( ) ELETIVA ( X ) URGÊNCIA ( ) 1° HORÁRIO
2) PERFIL: ( X ) CLÍNICA ( ) CIRÚRGICA ( ) OBSTÉTRICA
3) TUSS: 00021010X1
... "
GOSTEI 0
Jgsf
29/11/2012
eu criei uma função.
passo 1:
CREATE OR REPLACE FUNCTION "SEARCH_LONG" (r rowid) return varchar2 is
temporary_varchar varchar2(4000);
begin
select ai.ds_info_atendimento into temporary_varchar from dbamv.atendime_info ai where rowid=r;
return temporary_varchar;
end;
---
passo2: não esquecer de conceder grant de execução
GRANT EXECUTE ON "DBAMV"."SEARCH_LONG" TO "MV2000";
GRANT EXECUTE ON "DBAMV"."SEARCH_LONG" TO "MVINTEGRA";
---
Passo 2:usar a função a partir do select da view.
select ate.cd_atendimento,search_long(ainfo.rowid) ds_info_atendimentoselect
from atendime ate
,atendime_info ainfo
where ate.cd_atendimento = ainfo.cd_atendimento(+);
boa sorte..
passo 1:
CREATE OR REPLACE FUNCTION "SEARCH_LONG" (r rowid) return varchar2 is
temporary_varchar varchar2(4000);
begin
select ai.ds_info_atendimento into temporary_varchar from dbamv.atendime_info ai where rowid=r;
return temporary_varchar;
end;
---
passo2: não esquecer de conceder grant de execução
GRANT EXECUTE ON "DBAMV"."SEARCH_LONG" TO "MV2000";
GRANT EXECUTE ON "DBAMV"."SEARCH_LONG" TO "MVINTEGRA";
---
Passo 2:usar a função a partir do select da view.
select ate.cd_atendimento,search_long(ainfo.rowid) ds_info_atendimentoselect
from atendime ate
,atendime_info ainfo
where ate.cd_atendimento = ainfo.cd_atendimento(+);
boa sorte..
GOSTEI 0