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]

Responder a