Re: Res: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
ninguém vai conseguir quebrar... (Legião Urbana) As idéias estão no chão, você tropeça e acha a solução... (Titãs) De: Carlos martello carlos.martello@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades . Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ choice.com. br De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: [EMAIL PROTECTED] os.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br , Carlos Eduardo P. Martello carlos.martello@ ... escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ ... De: [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br [mailto:[EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br [mailto:[EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br ] Em nome de Gabriel Herdt Enviada em: segunda-feira, 17 de novembro de 2008 16:49 Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br Assunto: [oracle_br] Ajuda em procedure[URGENTE] Pessoal como executar o resultado de DBMS_METADATA. get_ddl (. ..) em uma Function? Segue abaixo minmha Function FUNCTION FN_COMPARA ( pr_usera IN VARCHAR2, pr_userb IN VARCHAR2, pr_erro OUT VARCHAR2 ) RETURN VARCHAR2 IS vtable_name VARCHAR2 (30); DDL CLOB; i INTEGER; a INTEGER; x INTEGER; --get dbms_metadata. get_ddl (object_type, name,schema, version,model, transform) ; -- variable_name datatype; BEGIN vtable_name := ''; i := 0; x := 0; -- grant select on all_tables to TCCB; FOR tabela IN (SELECT table_name FROM all_tables WHERE owner IN (UPPER ('tcca'), UPPER ('TCCB')) AND table_name NOT IN (SELECT table_name FROM all_tables WHERE owner = 'TCCB')) LOOP vtable_name := tabela.Table_ name; DDL := DBMS_METADATA. get_ddl ('TABLE', vtable_name, pr_usera
Re: Res: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
Ops, Desculpa me exspressei mal. na verdade seu exemplo só arrumei um () e acerto. mas tentei colocar meu caso e retorno um erro == ORA-06502: PL/SQL: erro: buffer de string de caracteres pequeno demais numérico ou de valor ORA-06512: em line 1 select sys.dbms_lob.substr(dbms_metadata.get_ddl ('PROCEDURE','PR_AUTODDL', 'TCCA'), sys.dbms_lob.getlength(dbms_metadata.get_ddl ('PROCEDURE','PR_AUTODDL', 'TCCA'))) DDL from dual --- Em oracle_br@yahoogrupos.com.br, ithigvo [EMAIL PROTECTED] escreveu Bom Dia,, Para converter o clob em varchar utilizo o seguinte comando,, select sys.dbms_lob.substr(dbms_metadata.get_ddl('USER',usuario), sys.dbms_lob.getlength(dbms_metadata.get_ddl 'USER',usuario))) DDL from dual neste caso para gerar o DDL de criação de usuários... mas nunca o utilizei dentro de uma procedure,, Veja se da certo Gustavo Veríssimo --- Em oracle_br@yahoogrupos.com.br, Gabriel Herdt gabrielherdt@ escreveu Sem problemas se eu conseguir passo aqui para a lista. mas vou poder ver isso soh no final de semana. tem que estar pronto na quarta a funcao =(. Vou passar uma funcao que trabalha com read_file do oracle. Ai se voce conseguir modificar ela para nosso objetivo ficaria grato. PROCEDURE read_file (pNomeTab in Varchar2, pNomeCampo in VarChar2, pNomeArq in VarChar2, pNomeDire in VarChar2, P_ERRO OUT VARCHAR2) IS src_file BFILE := bfilename(pNomeDire, pNomeArq); dst_file BLOB; lgh_file BINARY_INTEGER; sNomeDire char; --create or replace directory DIRETO as 'C:\Sistemas\Gerencial\Figuras'; BEGIN -- Zera Campo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = EMPTY_BLOB()'; -- Trava no dado do campo EXECUTE IMMEDIATE 'Select ' || pNomeCampo ||' From ' || pNomeTab ||' ' into dst_file ; -- Abre Arquivo sys.dbms_lob.fileopen(src_file, dbms_lob.file_readonly); -- Determina Tamando em bytes do arquivo lgh_file := sys.dbms_lob.getlength(src_file); -- Ler arquivo sys.dbms_lob.loadfromfile(dst_file, src_file, lgh_file); -- Update no arquivo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = :dst_file' USING dst_file; COMMIT; -- Fecha Arquivo sys.dbms_lob.fileclose(src_file); EXCEPTION WHEN no_data_found THEN rollback; P_ERRO := '-20001, Não há dados'; WHEN others THEN rollback; P_ERRO := '-20003, Não foi Possivel Gravar Arquivo'; END read_file; --- Em oracle_br@yahoogrupos.com.br, Wellerson Leite de Araújo waraujo_bh@ escreveu Pessoal, Neste caso eu acredito que o pacote DBMS_LOB possa ajudar. Nele vocês podem utilizar o procedimento READ para ler pedaços de uma variável do tipo LOB. Estes pedaços poderiam ser acumulados em uma variável VARCHAR2 que poderia ser passada para o comando EXECUTE IMMEDIATE. Claro que se o DDL exceder o tamanho máximo que um VARCHAR2 pode amazenar, vocês podem ainda criar uma lógica que utilize um vetor, acredito que para a maioria dos DDLs retornados uma única variável será suficiente. O pacote DBMS_LOB também oferece a função GETLENGTH, que pode ser utilizada para testar a quantidade de caracteres presentes numa variável CLOB. Só mais um comentário. Neste caso, eu recomendaria uma procedure. Não é muito elegante utilizar parâmetros de OUT em uma function. Att, Wellerson Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar... (Legião Urbana) As idéias estão no chão, você tropeça e acha a solução... (Titãs) De: Carlos martello carlos.martello@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades . Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ choice.com. br De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: [EMAIL PROTECTED] os.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o
Re: Res: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
na verdade esse comando SUBSTR só aceita até 4000 de byte. Alguem tem alguma solução? Como dar um execute EXECUTE IMMEDIATE em um CLOB com mais de 4000 Caractere?? --- Em oracle_br@yahoogrupos.com.br, Gabriel Herdt [EMAIL PROTECTED] escreveu Ops, Desculpa me exspressei mal. na verdade seu exemplo só arrumei um () e acerto. mas tentei colocar meu caso e retorno um erro == ORA-06502: PL/SQL: erro: buffer de string de caracteres pequeno demais numérico ou de valor ORA-06512: em line 1 select sys.dbms_lob.substr(dbms_metadata.get_ddl ('PROCEDURE','PR_AUTODDL', 'TCCA'), sys.dbms_lob.getlength(dbms_metadata.get_ddl ('PROCEDURE','PR_AUTODDL', 'TCCA'))) DDL from dual --- Em oracle_br@yahoogrupos.com.br, ithigvo ithigvo@ escreveu Bom Dia,, Para converter o clob em varchar utilizo o seguinte comando,, select sys.dbms_lob.substr(dbms_metadata.get_ddl('USER',usuario), sys.dbms_lob.getlength(dbms_metadata.get_ddl 'USER',usuario))) DDL from dual neste caso para gerar o DDL de criação de usuários... mas nunca o utilizei dentro de uma procedure,, Veja se da certo Gustavo Veríssimo --- Em oracle_br@yahoogrupos.com.br, Gabriel Herdt gabrielherdt@ escreveu Sem problemas se eu conseguir passo aqui para a lista. mas vou poder ver isso soh no final de semana. tem que estar pronto na quarta a funcao =(. Vou passar uma funcao que trabalha com read_file do oracle. Ai se voce conseguir modificar ela para nosso objetivo ficaria grato. PROCEDURE read_file (pNomeTab in Varchar2, pNomeCampo in VarChar2, pNomeArq in VarChar2, pNomeDire in VarChar2, P_ERRO OUT VARCHAR2) IS src_file BFILE := bfilename(pNomeDire, pNomeArq); dst_file BLOB; lgh_file BINARY_INTEGER; sNomeDire char; --create or replace directory DIRETO as 'C:\Sistemas\Gerencial\Figuras'; BEGIN -- Zera Campo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = EMPTY_BLOB()'; -- Trava no dado do campo EXECUTE IMMEDIATE 'Select ' || pNomeCampo ||' From ' || pNomeTab ||' ' into dst_file ; -- Abre Arquivo sys.dbms_lob.fileopen(src_file, dbms_lob.file_readonly); -- Determina Tamando em bytes do arquivo lgh_file := sys.dbms_lob.getlength(src_file); -- Ler arquivo sys.dbms_lob.loadfromfile(dst_file, src_file, lgh_file); -- Update no arquivo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = :dst_file' USING dst_file; COMMIT; -- Fecha Arquivo sys.dbms_lob.fileclose(src_file); EXCEPTION WHEN no_data_found THEN rollback; P_ERRO := '-20001, Não há dados'; WHEN others THEN rollback; P_ERRO := '-20003, Não foi Possivel Gravar Arquivo'; END read_file; --- Em oracle_br@yahoogrupos.com.br, Wellerson Leite de Araújo waraujo_bh@ escreveu Pessoal, Neste caso eu acredito que o pacote DBMS_LOB possa ajudar. Nele vocês podem utilizar o procedimento READ para ler pedaços de uma variável do tipo LOB. Estes pedaços poderiam ser acumulados em uma variável VARCHAR2 que poderia ser passada para o comando EXECUTE IMMEDIATE. Claro que se o DDL exceder o tamanho máximo que um VARCHAR2 pode amazenar, vocês podem ainda criar uma lógica que utilize um vetor, acredito que para a maioria dos DDLs retornados uma única variável será suficiente. O pacote DBMS_LOB também oferece a função GETLENGTH, que pode ser utilizada para testar a quantidade de caracteres presentes numa variável CLOB. Só mais um comentário. Neste caso, eu recomendaria uma procedure. Não é muito elegante utilizar parâmetros de OUT em uma function. Att, Wellerson Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar... (Legião Urbana) As idéias estão no chão, você tropeça e acha a solução... (Titãs) De: Carlos martello carlos.martello@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure [URGENTE] Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades . Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21
Re: Res: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
oracle_br@yahoogrupos.com.br, Gabriel Herdt [EMAIL PROTECTED] escreveu Ops, Desculpa me exspressei mal. na verdade seu exemplo só arrumei um () e acerto. mas tentei colocar meu caso e retorno um erro == ORA-06502: PL/SQL: erro: buffer de string de caracteres pequeno demais numérico ou de valor ORA-06512: em line 1 select sys.dbms_lob.substr(dbms_metadata.get_ddl ('PROCEDURE','PR_AUTODDL', 'TCCA'), sys.dbms_lob.getlength(dbms_metadata.get_ddl ('PROCEDURE','PR_AUTODDL', 'TCCA'))) DDL from dual --- Em oracle_br@yahoogrupos.com.br, ithigvo ithigvo@ escreveu Bom Dia,, Para converter o clob em varchar utilizo o seguinte comando,, select sys.dbms_lob.substr(dbms_metadata.get_ddl('USER',usuario), sys.dbms_lob.getlength(dbms_metadata.get_ddl 'USER',usuario))) DDL from dual neste caso para gerar o DDL de criação de usuários... mas nunca o utilizei dentro de uma procedure,, Veja se da certo Gustavo Veríssimo --- Em oracle_br@yahoogrupos.com.br, Gabriel Herdt gabrielherdt@ escreveu Sem problemas se eu conseguir passo aqui para a lista. mas vou poder ver isso soh no final de semana. tem que estar pronto na quarta a funcao =(. Vou passar uma funcao que trabalha com read_file do oracle. Ai se voce conseguir modificar ela para nosso objetivo ficaria grato. PROCEDURE read_file (pNomeTab in Varchar2, pNomeCampo in VarChar2, pNomeArq in VarChar2, pNomeDire in VarChar2, P_ERRO OUT VARCHAR2) IS src_file BFILE := bfilename(pNomeDire, pNomeArq); dst_file BLOB; lgh_file BINARY_INTEGER; sNomeDire char; --create or replace directory DIRETO as 'C:\Sistemas\Gerencial\Figuras'; BEGIN -- Zera Campo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = EMPTY_BLOB()'; -- Trava no dado do campo EXECUTE IMMEDIATE 'Select ' || pNomeCampo ||' From ' || pNomeTab ||' ' into dst_file ; -- Abre Arquivo sys.dbms_lob.fileopen(src_file, dbms_lob.file_readonly); -- Determina Tamando em bytes do arquivo lgh_file := sys.dbms_lob.getlength(src_file); -- Ler arquivo sys.dbms_lob.loadfromfile(dst_file, src_file, lgh_file); -- Update no arquivo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = :dst_file' USING dst_file; COMMIT; -- Fecha Arquivo sys.dbms_lob.fileclose(src_file); EXCEPTION WHEN no_data_found THEN rollback; P_ERRO := '-20001, Não há dados'; WHEN others THEN rollback; P_ERRO := '-20003, Não foi Possivel Gravar Arquivo'; END read_file; --- Em oracle_br@yahoogrupos.com.br, Wellerson Leite de Araújo waraujo_bh@ escreveu Pessoal, Neste caso eu acredito que o pacote DBMS_LOB possa ajudar. Nele vocês podem utilizar o procedimento READ para ler pedaços de uma variável do tipo LOB. Estes pedaços poderiam ser acumulados em uma variável VARCHAR2 que poderia ser passada para o comando EXECUTE IMMEDIATE. Claro que se o DDL exceder o tamanho máximo que um VARCHAR2 pode amazenar, vocês podem ainda criar uma lógica que utilize um vetor, acredito que para a maioria dos DDLs retornados uma única variável será suficiente. O pacote DBMS_LOB também oferece a função GETLENGTH, que pode ser utilizada para testar a quantidade de caracteres presentes numa variável CLOB. Só mais um comentário. Neste caso, eu recomendaria uma procedure. Não é muito elegante utilizar parâmetros de OUT em uma function. Att, Wellerson Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar... (Legião Urbana) As idéias estão no chão, você tropeça e acha a solução... (Titãs) De: Carlos martello carlos.martello@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades . Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ choice.com. br De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED
Re: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: segunda-feira, 17 de novembro de 2008 16:49 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br Assunto: [oracle_br] Ajuda em procedure[URGENTE] Pessoal como executar o resultado de DBMS_METADATA.get_ddl (...) em uma Function? Segue abaixo minmha Function FUNCTION FN_COMPARA ( pr_usera IN VARCHAR2, pr_userb IN VARCHAR2, pr_erro OUT VARCHAR2 ) RETURN VARCHAR2 IS vtable_name VARCHAR2 (30); DDL CLOB; i INTEGER; a INTEGER; x INTEGER; --get dbms_metadata.get_ddl (object_type,name,schema,version,model,transform); -- variable_name datatype; BEGIN vtable_name := ''; i := 0; x := 0; -- grant select on all_tables to TCCB; FOR tabela IN (SELECT table_name FROM all_tables WHERE owner IN (UPPER ('tcca'), UPPER ('TCCB')) AND table_name NOT IN (SELECT table_name FROM all_tables WHERE owner = 'TCCB')) LOOP vtable_name := tabela.Table_name; DDL := DBMS_METADATA.get_ddl ('TABLE', vtable_name, pr_usera); EXECUTE IMMEDIATE TO_CHAR (DDL); COMMIT; END LOOP; RETURN TO_CHAR (DDL); EXCEPTION WHEN OTHERS THEN pr_erro := ('Erro: ' ||pr_erro||SQLERRM); END; [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]
Re: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
SYSTEM.TESTE (ENQ_TID VARCHAR2(22), STEP_NO NUMBE R, DBLINK VARCHAR2(128), SCHEMA_NAME VARCHAR2(30), PACKAGE_NAME VARC HAR2(30), CATCHUP RAW(16) DEFAULT '00', CONSTRAINT TESTE_PRIMARY PRIMAR Y KEY (ENQ_TID, DBLINK, STEP_NO) USING INDEX PCTFREE 10 INITRANS 2 MAXTR ANS 255 COMPUTE STATISTICS STORAGE(INITIAL 40960 NEXT 40960 MINEXTENTS 1 MAXE XTENTS 505 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE TOOLS ENABLE, CONSTRAINT TESTE_FK FOREIGN KEY (DBLINK, CA TCHUP) REFERENCES SYSTEM.DEF$_DESTINATION (DBLINK, CATCHUP) ENABLE ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(I NITIAL 40960 NEXT 40960 MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE TOOLS == olha aí : [EMAIL PROTECTED]:SQLBEGIN 2 execute immediate(to_char(:x)); 3 END; 4 / Procedimento PL/SQL concluído com sucesso. [EMAIL PROTECTED]:SQL@desc teste Nome Nulo?Tipo - ENQ_TID NOT NULL VARCHAR2(22) STEP_NO NOT NULL NUMBER DBLINKNOT NULL VARCHAR2(128) SCHEMA_NAMEVARCHAR2(30) PACKAGE_NAME VARCHAR2(30) CATCHUPRAW(16) []s Chiappa == Palestrante ENPO.BR - acesse http://www.enpo-br.org/ Instrutor Workshops ENPO/TWS - acesse http://www.twstecnologia.com.br/ == O mundo precisa de mais gênios humildes e modestos - infelizmente somos muito poucos --- Em oracle_br@yahoogrupos.com.br, Carlos martello carlos.martello@ escreveu Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades. Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs
Re: Res: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
Sem problemas se eu conseguir passo aqui para a lista. mas vou poder ver isso soh no final de semana. tem que estar pronto na quarta a funcao =(. Vou passar uma funcao que trabalha com read_file do oracle. Ai se voce conseguir modificar ela para nosso objetivo ficaria grato. PROCEDURE read_file (pNomeTab in Varchar2, pNomeCampo in VarChar2, pNomeArq in VarChar2, pNomeDire in VarChar2, P_ERRO OUT VARCHAR2) IS src_file BFILE := bfilename(pNomeDire, pNomeArq); dst_file BLOB; lgh_file BINARY_INTEGER; sNomeDire char; --create or replace directory DIRETO as 'C:\Sistemas\Gerencial\Figuras'; BEGIN -- Zera Campo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = EMPTY_BLOB()'; -- Trava no dado do campo EXECUTE IMMEDIATE 'Select ' || pNomeCampo ||' From ' || pNomeTab ||' ' into dst_file ; -- Abre Arquivo sys.dbms_lob.fileopen(src_file, dbms_lob.file_readonly); -- Determina Tamando em bytes do arquivo lgh_file := sys.dbms_lob.getlength(src_file); -- Ler arquivo sys.dbms_lob.loadfromfile(dst_file, src_file, lgh_file); -- Update no arquivo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = :dst_file' USING dst_file; COMMIT; -- Fecha Arquivo sys.dbms_lob.fileclose(src_file); EXCEPTION WHEN no_data_found THEN rollback; P_ERRO := '-20001, Não há dados'; WHEN others THEN rollback; P_ERRO := '-20003, Não foi Possivel Gravar Arquivo'; END read_file; --- Em oracle_br@yahoogrupos.com.br, Wellerson Leite de Araújo [EMAIL PROTECTED] escreveu Pessoal, Neste caso eu acredito que o pacote DBMS_LOB possa ajudar. Nele vocês podem utilizar o procedimento READ para ler pedaços de uma variável do tipo LOB. Estes pedaços poderiam ser acumulados em uma variável VARCHAR2 que poderia ser passada para o comando EXECUTE IMMEDIATE. Claro que se o DDL exceder o tamanho máximo que um VARCHAR2 pode amazenar, vocês podem ainda criar uma lógica que utilize um vetor, acredito que para a maioria dos DDLs retornados uma única variável será suficiente. O pacote DBMS_LOB também oferece a função GETLENGTH, que pode ser utilizada para testar a quantidade de caracteres presentes numa variável CLOB. Só mais um comentário. Neste caso, eu recomendaria uma procedure. Não é muito elegante utilizar parâmetros de OUT em uma function. Att, Wellerson Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar... (Legião Urbana) As idéias estão no chão, você tropeça e acha a solução... (Titãs) De: Carlos martello [EMAIL PROTECTED] Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades . Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ choice.com. br De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: [EMAIL PROTECTED] os.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br , Carlos Eduardo P. Martello carlos.martello@ ... escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ ... De: [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br [mailto:[EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em [EMAIL
Re: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
NOT NULL VARCHAR2(22) STEP_NO NOT NULL NUMBER DBLINKNOT NULL VARCHAR2(128) SCHEMA_NAMEVARCHAR2(30) PACKAGE_NAME VARCHAR2(30) CATCHUPRAW(16) []s Chiappa == Palestrante ENPO.BR - acesse http://www.enpo-br.org/ Instrutor Workshops ENPO/TWS - acesse http://www.twstecnologia.com.br/ == O mundo precisa de mais gênios humildes e modestos - infelizmente somos muito poucos --- Em oracle_br@yahoogrupos.com.br, Carlos martello carlos.martello@ escreveu Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades. Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: segunda-feira, 17 de novembro de 2008 16:49 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br Assunto: [oracle_br] Ajuda em procedure[URGENTE] Pessoal como executar o resultado de DBMS_METADATA.get_ddl (...) em uma Function? Segue abaixo minmha Function FUNCTION FN_COMPARA ( pr_usera IN VARCHAR2, pr_userb IN VARCHAR2, pr_erro OUT VARCHAR2 ) RETURN VARCHAR2 IS vtable_name VARCHAR2 (30); DDL CLOB; i INTEGER; a INTEGER; x INTEGER; --get dbms_metadata.get_ddl (object_type,name,schema,version,model,transform); -- variable_name datatype; BEGIN vtable_name := ''; i := 0; x := 0; -- grant select on all_tables to TCCB; FOR tabela IN (SELECT table_name FROM all_tables WHERE owner IN (UPPER ('tcca'), UPPER ('TCCB
Re: Res: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
Bom Dia,, Para converter o clob em varchar utilizo o seguinte comando,, select sys.dbms_lob.substr(dbms_metadata.get_ddl('USER',usuario), sys.dbms_lob.getlength(dbms_metadata.get_ddl 'USER',usuario))) DDL from dual neste caso para gerar o DDL de criação de usuários... mas nunca o utilizei dentro de uma procedure,, Veja se da certo Gustavo Veríssimo --- Em oracle_br@yahoogrupos.com.br, Gabriel Herdt [EMAIL PROTECTED] escreveu Sem problemas se eu conseguir passo aqui para a lista. mas vou poder ver isso soh no final de semana. tem que estar pronto na quarta a funcao =(. Vou passar uma funcao que trabalha com read_file do oracle. Ai se voce conseguir modificar ela para nosso objetivo ficaria grato. PROCEDURE read_file (pNomeTab in Varchar2, pNomeCampo in VarChar2, pNomeArq in VarChar2, pNomeDire in VarChar2, P_ERRO OUT VARCHAR2) IS src_file BFILE := bfilename(pNomeDire, pNomeArq); dst_file BLOB; lgh_file BINARY_INTEGER; sNomeDire char; --create or replace directory DIRETO as 'C:\Sistemas\Gerencial\Figuras'; BEGIN -- Zera Campo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = EMPTY_BLOB()'; -- Trava no dado do campo EXECUTE IMMEDIATE 'Select ' || pNomeCampo ||' From ' || pNomeTab ||' ' into dst_file ; -- Abre Arquivo sys.dbms_lob.fileopen(src_file, dbms_lob.file_readonly); -- Determina Tamando em bytes do arquivo lgh_file := sys.dbms_lob.getlength(src_file); -- Ler arquivo sys.dbms_lob.loadfromfile(dst_file, src_file, lgh_file); -- Update no arquivo Blob EXECUTE IMMEDIATE 'UPDATE '|| pNomeTab ||' SET ' ||pNomeCampo|| ' = :dst_file' USING dst_file; COMMIT; -- Fecha Arquivo sys.dbms_lob.fileclose(src_file); EXCEPTION WHEN no_data_found THEN rollback; P_ERRO := '-20001, Não há dados'; WHEN others THEN rollback; P_ERRO := '-20003, Não foi Possivel Gravar Arquivo'; END read_file; --- Em oracle_br@yahoogrupos.com.br, Wellerson Leite de Araújo waraujo_bh@ escreveu Pessoal, Neste caso eu acredito que o pacote DBMS_LOB possa ajudar. Nele vocês podem utilizar o procedimento READ para ler pedaços de uma variável do tipo LOB. Estes pedaços poderiam ser acumulados em uma variável VARCHAR2 que poderia ser passada para o comando EXECUTE IMMEDIATE. Claro que se o DDL exceder o tamanho máximo que um VARCHAR2 pode amazenar, vocês podem ainda criar uma lógica que utilize um vetor, acredito que para a maioria dos DDLs retornados uma única variável será suficiente. O pacote DBMS_LOB também oferece a função GETLENGTH, que pode ser utilizada para testar a quantidade de caracteres presentes numa variável CLOB. Só mais um comentário. Neste caso, eu recomendaria uma procedure. Não é muito elegante utilizar parâmetros de OUT em uma function. Att, Wellerson Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar... (Legião Urbana) As idéias estão no chão, você tropeça e acha a solução... (Titãs) De: Carlos martello carlos.martello@ Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades . Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ choice.com. br De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: [EMAIL PROTECTED] os.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em [EMAIL PROTECTED] os.com.br mailto:oracle_ br% 40yahoogrupos .com.br , Carlos Eduardo P. Martello carlos.martello@ ... escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250
Re: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
://www.enpo-br.org/ Instrutor Workshops ENPO/TWS - acesse http://www.twstecnologia.com.br/ == O mundo precisa de mais gênios humildes e modestos - infelizmente somos muito poucos --- Em oracle_br@yahoogrupos.com.br, Carlos martello [EMAIL PROTECTED] escreveu Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades. Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: [EMAIL PROTECTED] De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: segunda-feira, 17 de novembro de 2008 16:49 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br Assunto: [oracle_br] Ajuda em procedure[URGENTE] Pessoal como executar o resultado de DBMS_METADATA.get_ddl(...) em uma Function? Segue abaixo minmha Function FUNCTION FN_COMPARA ( pr_usera IN VARCHAR2, pr_userb IN VARCHAR2, pr_erro OUT VARCHAR2 ) RETURN VARCHAR2 IS vtable_name VARCHAR2 (30); DDL CLOB; i INTEGER; a INTEGER; x INTEGER; --get dbms_metadata.get_ddl (object_type,name,schema,version,model,transform); -- variable_name datatype; BEGIN vtable_name := ''; i := 0; x := 0; -- grant select on all_tables to TCCB; FOR tabela IN (SELECT table_name FROM all_tables WHERE owner IN (UPPER ('tcca'), UPPER ('TCCB')) AND table_name NOT IN (SELECT table_name FROM all_tables WHERE owner = 'TCCB')) LOOP vtable_name := tabela.Table_name; DDL := DBMS_METADATA.get_ddl ('TABLE', vtable_name, pr_usera); EXECUTE IMMEDIATE TO_CHAR (DDL); COMMIT; END LOOP; RETURN TO_CHAR (DDL); EXCEPTION WHEN OTHERS THEN pr_erro := ('Erro: ' ||pr_erro||SQLERRM); END; [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]
Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em oracle_br@yahoogrupos.com.br, Carlos Eduardo P. Martello [EMAIL PROTECTED] escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: [EMAIL PROTECTED] De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: segunda-feira, 17 de novembro de 2008 16:49 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br Assunto: [oracle_br] Ajuda em procedure[URGENTE] Pessoal como executar o resultado de DBMS_METADATA.get_ddl(...) em uma Function? Segue abaixo minmha Function FUNCTION FN_COMPARA ( pr_usera IN VARCHAR2, pr_userb IN VARCHAR2, pr_erro OUT VARCHAR2 ) RETURN VARCHAR2 IS vtable_name VARCHAR2 (30); DDL CLOB; i INTEGER; a INTEGER; x INTEGER; --get dbms_metadata.get_ddl (object_type,name,schema,version,model,transform); -- variable_name datatype; BEGIN vtable_name := ''; i := 0; x := 0; -- grant select on all_tables to TCCB; FOR tabela IN (SELECT table_name FROM all_tables WHERE owner IN (UPPER ('tcca'), UPPER ('TCCB')) AND table_name NOT IN (SELECT table_name FROM all_tables WHERE owner = 'TCCB')) LOOP vtable_name := tabela.Table_name; DDL := DBMS_METADATA.get_ddl ('TABLE', vtable_name, pr_usera); EXECUTE IMMEDIATE TO_CHAR (DDL); COMMIT; END LOOP; RETURN TO_CHAR (DDL); EXCEPTION WHEN OTHERS THEN pr_erro := ('Erro: ' ||pr_erro||SQLERRM); END; [As partes desta mensagem que não continham texto foram removidas] [As partes desta mensagem que não continham texto foram removidas]
RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades. Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: [EMAIL PROTECTED] De: oracle_br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: oracle_br@yahoogrupos.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br , Carlos Eduardo P. Martello [EMAIL PROTECTED] escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: [EMAIL PROTECTED] De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br ] Em nome de Gabriel Herdt Enviada em: segunda-feira, 17 de novembro de 2008 16:49 Para: oracle_br@yahoogrupos.com.br mailto:oracle_br%40yahoogrupos.com.br mailto:oracle_br% 40yahoogrupos.com.br Assunto: [oracle_br] Ajuda em procedure[URGENTE] Pessoal como executar o resultado de DBMS_METADATA.get_ddl(...) em uma Function? Segue abaixo minmha Function FUNCTION FN_COMPARA ( pr_usera IN VARCHAR2, pr_userb IN VARCHAR2, pr_erro OUT VARCHAR2 ) RETURN VARCHAR2 IS vtable_name VARCHAR2 (30); DDL CLOB; i INTEGER; a INTEGER; x INTEGER; --get dbms_metadata.get_ddl (object_type,name,schema,version,model,transform); -- variable_name datatype; BEGIN vtable_name := ''; i := 0; x := 0; -- grant select on all_tables to TCCB; FOR tabela IN (SELECT table_name FROM all_tables WHERE owner IN (UPPER ('tcca'), UPPER ('TCCB')) AND table_name NOT IN (SELECT table_name FROM all_tables WHERE owner = 'TCCB')) LOOP vtable_name := tabela.Table_name; DDL := DBMS_METADATA.get_ddl ('TABLE', vtable_name, pr_usera); EXECUTE IMMEDIATE TO_CHAR (DDL); COMMIT; END LOOP; RETURN TO_CHAR (DDL); EXCEPTION WHEN OTHERS THEN pr_erro := ('Erro: ' ||pr_erro||SQLERRM); END; [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]
Res: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE]
Pessoal, Neste caso eu acredito que o pacote DBMS_LOB possa ajudar. Nele vocês podem utilizar o procedimento READ para ler pedaços de uma variável do tipo LOB. Estes pedaços poderiam ser acumulados em uma variável VARCHAR2 que poderia ser passada para o comando EXECUTE IMMEDIATE. Claro que se o DDL exceder o tamanho máximo que um VARCHAR2 pode amazenar, vocês podem ainda criar uma lógica que utilize um vetor, acredito que para a maioria dos DDLs retornados uma única variável será suficiente. O pacote DBMS_LOB também oferece a função GETLENGTH, que pode ser utilizada para testar a quantidade de caracteres presentes numa variável CLOB. Só mais um comentário. Neste caso, eu recomendaria uma procedure. Não é muito elegante utilizar parâmetros de OUT em uma function. Att, Wellerson Não vou deixar me embrutecer, eu acredito nos meus ideais. Podem até maltratar o meu coração, que meu espírito ninguém vai conseguir quebrar... (Legião Urbana) As idéias estão no chão, você tropeça e acha a solução... (Titãs) De: Carlos martello [EMAIL PROTECTED] Para: oracle_br@yahoogrupos.com.br Enviadas: Quarta-feira, 19 de Novembro de 2008 17:14:31 Assunto: RES: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Ah sim. Então cara, vc não consegue pelo fato de um campo ou variável do tipo clob ter suas particularidades . Eu sinceramente também não sei e até pesquisaria pra vc (até pq também estava precisando dessa informação), mas o certo seria fazer uma pesquisa no Google ou metalink sobre como converter clob em varchar por exemplo. Assim o problema seria resolvido ;). Assim que algum dos dois encontrar a fórmula encaminhamos, beleza? Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ choice.com. br De: [EMAIL PROTECTED] os.com.br [mailto:[EMAIL PROTECTED] os.com.br] Em nome de Gabriel Herdt Enviada em: quarta-feira, 19 de novembro de 2008 15:17 Para: [EMAIL PROTECTED] os.com.br Assunto: Re: RES: RES: [oracle_br] Ajuda em procedure[URGENTE] Eu não consigo passar o resultado do Get_dll para uma variavel e executar o conteudo dessa variavel. Tem outra forma de executar o Resultado do GET_DDL? --- Em [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br , Carlos Eduardo P. Martello carlos.martello@ ... escreveu Gabriel, até vi agora de uma forma mais atenta que vc já faz o execute immediate dentro da função. Não entendi o que você quer então É o execute immediate que não está funcionando? Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ ... De: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br [mailto:[EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br ] Em nome de Gabriel Herdt Enviada em: terça-feira, 18 de novembro de 2008 22:33 Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br Assunto: Re: RES: [oracle_br] Ajuda em procedure[URGENTE] assim obrigado vou tentar, maas eu quero executar p dll gerado pela funcao. pode me dizer como? --- Em [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br , Carlos Eduardo P. Martello carlos.martello@ escreveu Gabriel, Tente o seguinte: Declare Vsql varchar2(2000) :=''; Begin Vsql := fn_compara; Execute immediate vsql; End; Se ao invés de vc retornar um clob, retornar um varchar2, ajuda. Abs, Carlos Martello DBA Oracle / Consultor de Tecnologia TEL: 55+21+3094-6250 Choice Technologies S/A - Inteligência em Energia e-mail: carlosmartello@ De: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br [mailto:[EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br ] Em nome de Gabriel Herdt Enviada em: segunda-feira, 17 de novembro de 2008 16:49 Para: [EMAIL PROTECTED] os.com.br mailto:oracle_ br%40yahoogrupos .com.br mailto:oracle_ br% 40yahoogrupos. com.br Assunto: [oracle_br] Ajuda em procedure[URGENTE] Pessoal como executar o resultado de DBMS_METADATA. get_ddl(. ..) em uma Function? Segue abaixo minmha Function FUNCTION FN_COMPARA ( pr_usera IN VARCHAR2, pr_userb IN VARCHAR2, pr_erro OUT VARCHAR2 ) RETURN VARCHAR2 IS vtable_name VARCHAR2 (30); DDL CLOB; i INTEGER; a INTEGER; x INTEGER; --get dbms_metadata. get_ddl (object_type, name,schema, version,model, transform) ; -- variable_name datatype; BEGIN vtable_name := ''; i := 0; x := 0; -- grant select on all_tables to TCCB