dbandre29 0 Denunciar post Postado Outubro 28, 2005 tenho umas procedures cabeludas aqui, ja estava feito por outro DBA . Elas são feitas para gerar um relatório , porém dentro da PROC .Dentro da mesma tem cursores e variaveis que são usadas em um select campo into from tabela que depois será inserida numa tabela temporaria que mostrará a saída da PROC .O problema é que na procedure você pode consultar por diversos parametros e pode ter diversos tipos de retornos. Bem eu trabalho com Oracle 8 , voces acham que da pra fazer uma SnapShot com esses seguintes contextos apresesntados acima :D Compartilhar este post Link para o post Compartilhar em outros sites
Fabio Nascimento 0 Denunciar post Postado Outubro 28, 2005 :blink: Amigão, dá para ser um pouquinho mais claro? Eu num entendi... Compartilhar este post Link para o post Compartilhar em outros sites
dbandre29 0 Denunciar post Postado Outubro 28, 2005 po você não entendeu que partes Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Outubro 29, 2005 Hello, Dá sim para criar uma SNAPSHOT dentro da procedure, desde quê, na sua outra base de dados também tenha a mesma tabela com a mesma estrutura, assim, o SQL irá conseguir funcionar perfeitamente. Lembre-se que dar os GRANTS para o usuário que irá fazer o DBLINK! Abraços, http://forum.imasters.com.br/public/style_emoticons/default/bye1.gif Compartilhar este post Link para o post Compartilhar em outros sites
dbandre29 0 Denunciar post Postado Outubro 31, 2005 Fala irmão da uma olhada numa delas PROCEDURE SP_REPORT_GRP ( PE_GRP_EMP IN NUMBER, PE_TP_FILTRO_RECEITA_VOZ IN VARCHAR2, PE_RECEITA_VOZ IN VARCHAR2, PE_TIPOFILTRORECEITADADOS IN VARCHAR2, PE_RECEITA_DADOS IN VARCHAR2, PE_TIPOFILTRORECEITATELEFONICA IN VARCHAR2, PE_RECEITA_TELEFONIA IN VARCHAR2, PE_TIPOFILTRORECEITAINTERNET IN VARCHAR2, PE_RECEITA_INTERNET IN VARCHAR2, PE_DIPO_CD IN VARCHAR2 , PS_USUA_LOGIN IN VARCHAR2 , PS_RETORNO OUT PKG_SHOW_RESULTS.T_SHOW ) IS V_ERROR VARCHAR2(1000); V_DT_MOV VARCHAR2(6); V_TOTAL_VOZ NUMBER(20,2); V_TOTAL_DADOS NUMBER(20,2); V_TOTAL_TELEFONIA NUMBER(20,2); V_TOTAL_INTERNET NUMBER(20,2); v_SQL_W VARCHAR2(4000); CURSOR cGRUPO IS SELECT GRCE.GRCE_ID , GRCE_DS , GRCE.DIPO_CD FROM GRUPO_CLIENTE_EBT GRCE, CLIENTE_PORTAL CLIE WHERE GRCE.GRCE_CLIENTE_CONTROLADOR = CLIE.CLIE_CODIGO AND RTRIM(CLIE.CLIE_SG_COORDENADOR_LOCAL) IN( SELECT RTRIM(A.DS_DIRET_REGIO ) FROM DIRETORIA A , DIRETORIA_X_USUARIO_CONTATO B WHERE B.USUA_NM_LOGIN = PS_USUA_LOGIN AND A.CD_DIRET_REGIO = B.CD_DIRET_REGIO UNION SELECT PE_DIPO_CD FROM DUAL WHERE PE_DIPO_CD IS NOT NULL -- Importante lembrar que se nao passo a diretoria isso quer dizer que nao é um usuario -- do MVR ) ORDER BY GRCE.GRCE_DS; BEGIN DELETE FROM TM_GRUPOS_RECEITAS; -- Recupera a maior data de valor de -- 3CON - elimina o max com full na tabela valor_dw SELECT VADW_DT_MOV INTO V_DT_MOV FROM VALOR_DW_DATA_REF; FOR rGRUPO IN cGRUPO LOOP -- 3CON - inclusão da tabela GRUPO_CLIENTE_VALOR e o modelo de CONTA/SUB_CONTA SELECT SUM(VADW_VL) TOTAL INTO V_TOTAL_VOZ FROM GRUPO_CLIENTE_EBT GRCE , GRUPO_CLIENTE_X_CLIENTE GRCC , VALOR_DW V , GRUPO_CLIENTE_VALOR gv WHERE GRCE.GRCE_ID = GRCC.GRCE_ID AND GRCE.GRCE_ID = rGRUPO.GRCE_ID AND GV.CLIE_CONTA = SUBSTR(GRCC.CLIE_CODIGO,1,11) AND GV.VADW_DT_MOV = V_DT_MOV AND GV.TIVD_ID = 4 and v.vadw_id = gv.vadw_id ; SELECT SUM(VADW_VL) TOTAL INTO V_TOTAL_DADOS FROM GRUPO_CLIENTE_EBT GRCE , GRUPO_CLIENTE_X_CLIENTE GRCC , VALOR_DW V , GRUPO_CLIENTE_VALOR gv WHERE GRCE.GRCE_ID = GRCC.GRCE_ID AND GRCE.GRCE_ID = rGRUPO.GRCE_ID AND GV.CLIE_CONTA = SUBSTR(GRCC.CLIE_CODIGO,1,11) AND GV.VADW_DT_MOV = V_DT_MOV AND GV.TIVD_ID = 6 and v.vadw_id = gv.vadw_id ; SELECT SUM(VADW_VL) TOTAL INTO V_TOTAL_TELEFONIA FROM GRUPO_CLIENTE_EBT GRCE , GRUPO_CLIENTE_X_CLIENTE GRCC , VALOR_DW V , GRUPO_CLIENTE_VALOR gv WHERE GRCE.GRCE_ID = GRCC.GRCE_ID AND GRCE.GRCE_ID = rGRUPO.GRCE_ID AND GV.CLIE_CONTA = SUBSTR(GRCC.CLIE_CODIGO,1,11) AND GV.VADW_DT_MOV = V_DT_MOV AND GV.TIVD_ID = 5 and v.vadw_id = gv.vadw_id ; SELECT SUM(VADW_VL) TOTAL INTO V_TOTAL_INTERNET FROM GRUPO_CLIENTE_EBT GRCE , GRUPO_CLIENTE_X_CLIENTE GRCC , VALOR_DW V , GRUPO_CLIENTE_VALOR gv WHERE GRCE.GRCE_ID = GRCC.GRCE_ID AND GRCE.GRCE_ID = rGRUPO.GRCE_ID AND GV.CLIE_CONTA = SUBSTR(GRCC.CLIE_CODIGO,1,11) AND GV.VADW_DT_MOV = V_DT_MOV AND GV.TIVD_ID = 3 and v.vadw_id = gv.vadw_id ; INSERT INTO TM_GRUPOS_RECEITAS VALUES (rGRUPO.GRCE_ID ,rGRUPO.GRCE_DS ,rGRUPO.DIPO_CD ,V_TOTAL_VOZ ,V_TOTAL_DADOS ,V_TOTAL_TELEFONIA ,V_TOTAL_INTERNET); END LOOP; IF ((PE_TP_FILTRO_RECEITA_VOZ is NULL) AND (PE_TipoFiltroReceitaDados is NULL) AND (PE_TipoFiltroReceitatelefonica is NULL) AND (PE_TipoFiltroReceitaInternet is NULL)) THEN v_SQL_W:= 'SELECT * FROM TM_GRUPOS_RECEITAS'; ELSE v_SQL_W:='SELECT * FROM TM_GRUPOS_RECEITAS WHERE GRUPO_ID IS NOT NUL'; If ( PE_TP_FILTRO_RECEITA_VOZ Is Not Null ) Then If PE_TP_FILTRO_RECEITA_VOZ='>' then v_SQL_W := v_SQL_W || ' AND UPPER(TOTAL_VOZ) > ''' || PE_Receita_Voz || ''' '; End If; If PE_TP_FILTRO_RECEITA_VOZ='<' then v_SQL_W := v_SQL_W || ' AND UPPER(TOTAL_VOZ) < ''' || PE_Receita_Voz || ''' '; End If; If PE_TP_FILTRO_RECEITA_VOZ='=' then v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_VOZ) = ''' || PE_Receita_Voz || ''' '; End IF; END IF; If ( PE_TipoFiltroReceitaDados Is Not Null ) Then IF PE_TipoFiltroReceitaDados='>' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_DADOS) > ''' || PE_Receita_Dados|| ''' '; END IF; IF PE_TipoFiltroReceitaDados='<' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_DADOS) < ''' || PE_Receita_Dados|| ''' '; END IF; IF PE_TipoFiltroReceitaDados='=' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_DADOS) = ''' || PE_Receita_Dados|| ''' '; END IF; END IF; If ( PE_TipoFiltroReceitatelefonica Is Not Null ) Then IF PE_TipoFiltroReceitatelefonica='>' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_TELEFONIA) >''' || PE_Receita_Telefonia|| ''' '; END IF; IF PE_TipoFiltroReceitatelefonica='<' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_TELEFONIA) < ''' || PE_Receita_Telefonia|| ''' '; END IF; IF PE_TipoFiltroReceitatelefonica='=' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_TELEFONIA) =''' || PE_Receita_Telefonia|| ''' '; END IF; END IF; If ( PE_TipoFiltroReceitaInternet Is Not Null ) Then IF PE_TipoFiltroReceitaInternet='>' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_INTERNET) > ''' || PE_Receita_Internet|| ''' '; END IF; IF PE_TipoFiltroReceitaInternet='<' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_INTERNET) < ''' || PE_Receita_Internet|| ''' '; END IF; IF PE_TipoFiltroReceitaInternet='=' THEN v_SQL_W := v_SQL_W || 'AND UPPER(TOTAL_INTERNET) = ''' || PE_Receita_Internet|| ''' '; END IF; END IF; END IF; OPEN PS_RETORNO FOR v_SQL_W; DELETE FROM TM_GRUPOS_RECEITAS; COMMIT; EXCEPTION WHEN OTHERS THEN V_ERROR := 'ERRO NA EXECUCãO DA PROCEDURE (SP_SHOW_GRUPOS_RECEITAS) ! ' || SQLERRM; Raise_Application_Error( -20001, V_ERROR ); END; Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Outubro 31, 2005 Mais para que você quer criar uma SNAPSHOT? Qual o motivo do SNAPSHOT! Esses cursores lê tabelas com quantas linhas? Tem índices nessas tabelas? Tem analyze também para diminuir o custo do SELECT? Abraços, http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Compartilhar este post Link para o post Compartilhar em outros sites
dbandre29 0 Denunciar post Postado Outubro 31, 2005 viu a proc o que você achou ela nao retorna muitas linhas meu deu entender o escopo dela né , sobre indices tem sim , mas o qual sua opinião ?você acha vantajoso criar SnapShot ?Cara pra ser sincero o que é analise, e pra analisar estatistica Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Novembro 1, 2005 Novamente... Para quê você quer colocar um SNAPSHOT? Pelo que tô vendo a PROC pode ser um pouco melhorada e pode fazer um TUNING no banco! Abraços, :blink: Compartilhar este post Link para o post Compartilhar em outros sites
dbandre29 0 Denunciar post Postado Novembro 1, 2005 Valeu Rodrigo o que eu queria escutar de você é isso?Não há uma necessidade então de fazer uma SnapShot, mas veja bem qual o comando no Oracle que eu vejo a fragmentação de indices nas tabelas .Cara obrigadão pela força.[]s, André Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Novembro 4, 2005 Para você ver a fragmentação, você terá que fazer um SELECT do tamanho total da ìndice, dividido pelo tamanho total e saber quantos EXTENTS estão alocados para esse índice e verificar a marca d' água. Logo, Logo eu posto um scripts do Fórum de Scrips para verificar a fragmentação. Abraços, http://forum.imasters.com.br/public/style_emoticons/default/grin.gif Compartilhar este post Link para o post Compartilhar em outros sites
dbandre29 0 Denunciar post Postado Novembro 4, 2005 Valeu Rodrigo obrigadão!!!![]s,Andre Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Novembro 4, 2005 http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites