Walquencir Acho que o motivo do erro é outro. Provavelmente, nesse campo da tabela, há outros caracteres que não foram considerados pelo TRANSLATE que o Márcio sugeriu. Por isso ocorre o erro de conversão para number.
[ ] André Em 15/07/08, Walquencir Pedroti <[EMAIL PROTECTED]> escreveu: > > Grande Marcio!! > > Obrigado pela ajuda, mas este é o problema. > > Veja como ficou a tabela VIEW após a execução do SQL: > > CNPJ NUMBER à falta o valor > > NOME VARCHAR2(40) > > ENDERECO VARCHAR2(60) > > Quando deveria ficar destra forma: > > CNPJ NUMBER(15,0) > > NOME VARCHAR2(40) > > ENDERECO VARCHAR2(60) > > Por não ter o numero na frente em pesquisas diretas tipo select * from > tabela where cnpj =11111111 retorna erro > > Obrigado > > Walquencir Pedroti > > De: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> [mailto: > oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>] Em nome de > Marcio Portes > Enviada em: terça-feira, 15 de julho de 2008 00:58 > Para: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> > Assunto: Re: [oracle_br] Alterar campo varchar2 para number na VIEW > > Walquencir, > > Tenta ai: > > CREATE OR REPLACE FORCE VIEW > "SAC"."CLIENTE" ("CNPJ", "NOME", "ENDERECO") AS > SELECT to_number(replace(translate(L_CLI.CGC,'/-.',' '),' ','')) cnpj > , L_CLI.NOME NOME > , L_CLI.END ENDERECO, > FROM L.CLIENTE L_CLI > , L.REPRESENTANTE L_REP > , L.SUPERVISOR L_SUP > WHERE L_CLI.CODREP = L_REP.CODIGO > AND L_REP.SUPERVISOR = L_SUP.CODIGO > / > > 2008/7/14 Walquencir Pedroti <[EMAIL > PROTECTED]<walquencir.pedroti%40dovac.com.br><mailto: > walquencir.pedroti%40dovac.com.br <walquencir.pedroti%2540dovac.com.br>> > >: > > > Boa tarde a todos. > > > > Minha tabela o campo CNPJ é VARCHAR2. > > Quando monto minha view da forma abaixo. E a tabela view não reconhece > como > > Number o campo CNPJ, > > e portanto toda a consulta feita neste campo retorna como null, já um > > select all retorna o CNPJ. > > > > CREATE OR REPLACE FORCE VIEW "SAC"."CLIENTE" ("CNPJ", "NOME", "ENDERECO") > > AS > > SELECT TO_NUMBER(CNPJ), NOME, ENDERECO FROM ( > > SELECT * FROM ( > > SELECT > > CONCAT ('1',L_CLI.CGC) CHAVE, > > REPLACE(REPLACE(REPLACE(L_CLI.CGC,'.',null),'/',null),'-',null) CNPJ, > > L_CLI.NOME NOME, > > L_CLI.END ENDERECO, > > FROM > > L.CLIENTE L_CLI, > > L.REPRESENTANTE L_REP, > > L.SUPERVISOR L_SUP > > WHERE > > L_CLI.CODREP = L_REP.CODIGO > > AND > > L_REP.SUPERVISOR = L_SUP.CODIGO > > ) > > ); > > > > Criei outra VIEW com declare > > set serverout on; > > DECLARE > > var_CNPJ number ; > > BEGIN > > SELECT CNPJ INTO var_CNPJ FROM ( > > SELECT > > REPLACE(REPLACE(REPLACE(L_CLI0A0.CGC,'.',null),'/',null),'-',null) cnpj, > > L_CLI.NOME NOME, > > L_CLI.END ENDERECO, > > FROM > > L.CLIENTE L_CLI, > > L.REPRESENTANTE L_REP, > > L.SUPERVISOR L_SUP > > WHERE > > L_CLI.CODREP = L_REP.CODIGO > > AND > > L_REP.SUPERVISOR = L_SUP.CODIGO > > and rownum < 6 > > ); > > END; > > / > > Mas esta aparece a mensagem ORA-01422: exact fetch returns more than > > requested number of rows. > > Verificando a mensagem no metalink, existe um bug para minha versão que é > > 10.1.0.2.0. > > E lá existe uma outra forma de fazer que é: > > DECLARE > > TYPE NumList IS TABLE OF NUMBER; > > TYPE NameList IS TABLE OF VARCHAR2(15); > > empnos NumList; > > enames NameList; > > sals NumList; > > BEGIN > > EXECUTE IMMEDIATE 'SELECT empno, ename FROM emp' > > BULK COLLECT INTO empnos, enames; > > DBMS_OUTPUT.PUT_LINE('Empployess collected = '||empnos.count); > > END; > > / > > > > ============ > > Alguém consegue VER uma solução para a criação de uma VIEW????? > > Obrigado a todos > > W.Pedroti > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > -- > Marcio Portes > http://mportes.blogspot.com > > [As partes desta mensagem que não continham texto foram removidas] > > [As partes desta mensagem que não continham texto foram removidas] > > > [As partes desta mensagem que não continham texto foram removidas]