Cara, veja se assim atende a sua necessidade. CREATE OR REPLACE PROCEDURE PRC_VER_OBJETOS (P_OTYPE IN VARCHAR2, P_RET OUT VARCHAR2 ) IS
V_ONAME VARCHAR2(30); V_QTDE NUMBER; V_OTYPE VARCHAR2(1000); V_RET VARCHAR2(1000); CURSOR C_REL_OBJETOS IS SELECT OBJECT_TYPE, OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE = P_OTYPE; CURSOR C_QTDE_OBJETOS IS SELECT COUNT(OBJECT_TYPE) FROM USER_OBJECTS WHERE OBJECT_TYPE = P_OTYPE; BEGIN SELECT COUNT(OBJECT_TYPE) INTO V_QTDE FROM USER_OBJECTS WHERE OBJECT_TYPE = P_OTYPE; OPEN C_REL_OBJETOS; LOOP FETCH C_REL_OBJETOS INTO V_OTYPE, V_ONAME; EXIT WHEN C_REL_OBJETOS%NOTFOUND; V_RET := V_OTYPE||' - '||V_ONAME; DBMS_OUTPUT.PUT_LINE(V_RET); END LOOP; CLOSE C_REL_OBJETOS; OPEN C_QTDE_OBJETOS; FETCH C_QTDE_OBJETOS INTO V_QTDE; V_RET := 'SÃO '||V_QTDE||' '||V_OTYPE||'(S) NO TOTAL!'; DBMS_OUTPUT.PUT_LINE(V_RET); CLOSE C_QTDE_OBJETOS; IF V_QTDE = 0 THEN V_RET := 'NÃO EXISTE OBJETOS DESTE TIPO NO SEU DOMÍNIO!'; DBMS_OUTPUT.PUT_LINE(V_RET); END IF; P_RET := V_RET; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END PRC_VER_OBJETOS; Obrigado, Sergio Lucchini ________________________________ De: oracle_br@yahoogrupos.com.br [mailto:oracle...@yahoogrupos.com.br] Em nome de Matheus Malta Enviada em: quinta-feira, 12 de novembro de 2009 15:41 Para: Oracle - Grupos Assunto: [oracle_br] Problemas com procedure Galera... Boa tarde! Seguinte gente... Criei uma procedure que me retorne a quantidade total de objetos bem como os nomes desses objetos, dado o parâmetro que é passado que, no caso, é o tipo de objeto. Ex: Se eu quero obter o número de procedures que eu criei dentro do meu schema, eu executo a proc, passo como parâmetro o tipo de objeto PROCEDURE e ele me retorna o total de procedures q eu tenho e o nome de cada uma delas... A proc é como segue: CREATE OR REPLACE PROCEDURE prc_ver_objetos ( v_otype IN VARCHAR2, v_ret OUT VARCHAR2 ) IS v_oname VARCHAR2(30); v_qtde NUMBER; v_ver BOOLEAN; v_fim EXCEPTIONS; CURSOR c_rel_objetos IS SELECT object_type, object_name FROM user_objects WHERE object_type = v_otype; CURSOR c_qtde_objetos IS SELECT COUNT(object_type) FROM user_objects WHERE object_type = v_otype; BEGIN SELECT COUNT(object_type) INTO v_qtde FROM user_objects WHERE object_type = v_otype; IF v_qtde = 0 THEN v_ver := FALSE; RAISE v_fim; ELSIF v_qtde > 0 THEN v_ver := TRUE; OPEN c_rel_objetos; LOOP FETCH c_rel_objetos INTO v_otype, v_oname; EXIT WHEN c_rel_objetos%NOTFOUND; v_ret := v_otype||' - '||v_oname; DBMS_OUTPUT.PUT_LINE(v_ret); END LOOP; CLOSE c_rel_objetos; OPEN c_qtde_objetos; FETCH c_qtde_objetos INTO v_qtde; v_ret := 'SÃO '||v_qtde||' '||v_otype||'(S) NO TOTAL!'; DBMS_OUTPUT.PUT_LINE(v_ret); CLOSE c_qtde_objetos; END IF; EXCEPTION WHEN v_qtde = 0 THEN v_ver := FALSE; v_ret := 'NÃO EXISTE OBJETOS DESTE TIPO NO SEU DOMÍNIO!'; DBMS_OUTPUT.PUT_LINE(v_ret); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END prc_ver_objetos; / Pois bem gente... O fato é que, quando eu compilo a procedure, ela me retorna erro na linha de exceção: WHEN v_qtde = 0, indicando que o sinal "=" não era esperado, e que era esperado outro... Até tentei trocar e colocar o sinal de atribuição (meio que no chutômetro) mas continuou acusando o mesmo erro que é: SQL> show error Erros para PROCEDURE PRC_VER_OBJETOS: LINE/COL ERROR -------- ---------------------------------------------------------- 65/13 PLS-00103: Encontrado o símbolo "=" quando um dos seguintes símbolos era esperado: . then or E com isso a proc compila com erros e não executa... Alguém poderia me ajudar com essa questão por favor? Obrigado desde já! Matheus Malta [As partes desta mensagem que não continham texto foram removidas] No virus found in this incoming message. Checked by AVG - www.avg.com Version: 8.5.423 / Virus Database: 270.14.52/2484 - Release Date: 11/12/09 07:38:00 [As partes desta mensagem que não continham texto foram removidas]