2011-04-19 21 views
9

que han buscado la red y he encontrado un post que utiliza el siguiente fragmento de código para comprobar si existe un procedimiento almacenado:¿Cómo verificar si existe un procedimiento almacenado?

select * 
    from USER_SOURCE 
where type='PROCEDURE' 
    and name='my_stored_procedure.' 

¿Hay alguna otra manera de comprobar si existe un procedimiento?

Editado para añadir:

Antes de la publicación de formas de SQL Server, por favor, estoy buscando maneras de ORACLE.

Respuesta

30

Alternativas:

USER_PROCEDURES:

SELECT * 
    FROM USER_PROCEDURES 
WHERE object_name = 'MY_STORED_PROCEDURE' 

USER_OBJECTS:

SELECT * 
    FROM USER_OBJECTS 
WHERE object_type = 'PROCEDURE' 
    AND object_name = 'MY_STORED_PROCEDURE' 
+0

exactamente lo que estaba buscando ... ¡Gracias! –

+1

+1 ..las otras vistas para recordar: 'ALL_OBJECTS',' DBA_OBJECTS' (si tiene ese priv). Lo mismo para '_PROCEDURES' también. – Guru

0

La única manera de ver si existe un procedimiento en la base de datos es, sin embargo consultar DBA_OBJECTS. La desventaja aquí es que solo un dba tiene acceso a esta vista. El segundo mejor es usar todos_objetos. ALL_OBJECTS le muestra los objetos para los que de alguna manera tiene un privilegio. USER_OBJECTS solo le muestra sus propios objetos.

-1

seleccione * de USER_SOURCE donde type = 'PROCEDIMIENTO' y el nombre = 'my_stored_procedure.'

+0

¿Qué es esto? ¿Lo mismo que la pregunta? – Cilan

1

ejecutar la consulta más adelante en SQL * PLUS, ODBC Test, ...

texto SELECT all_source WHERE nombre = ORDEN 'MY_PROCEDURE' por la línea

donde MY_PROCEDURE es el nombre del procedimiento almacenado.

A continuación se muestra un ejemplo de salida:

obtener datos Todos: "TEXTO" "PROCEDIMIENTO Usp_Get_Blob
" (
"P_DOC_ID INT,
" P_DOC_TEXT OUT BLOB)
"como
" comienzan
"seleccione B1 en p_doc_text
" de blobtest
"donde ID = p_doc_id;
"fin;"

5

¡Algo que funcionó para mí!

SELECT text 
FROM all_source 
WHERE name = 'MY_SP_NAME' 
ORDER BY line; 

Alternativamente, puede intentar llamar a SP como esto:

CALL MY_SP_NAME(); 

Usted podría terminar error como este, pero que confirma que ha SP definido allí:

OCI Statement Execution failure.ORA-06553: PLS-306: wrong number or types of arguments in call to 'MY_SP_NAME' 
Cuestiones relacionadas