Как проверить, существует ли хранимая процедура?

Я искал в сети, и я нашел в должности который использует следующий фрагмент, чтобы проверить, существует ли хранимая процедура:

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

есть ли другой способ проверить, существует ли процедура?

редактировать, чтобы добавить:

перед публикацией способов SQL Server, пожалуйста, я ищу способы ORACLE.

5 ответов


варианты:

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'

что-то, что сработало для меня!

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

кроме того, можно попробовать позвонить СП такой:

CALL MY_SP_NAME();

вы можете закончить ошибку, как это, но это подтверждает, что вы определили SP там:

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

выполните запрос ниже в SQL*PLUS, ODBC Test,...

выберите текст из all_source, где name=' MY_PROCEDURE ' ORDER by line

где MY_PROCEDURE-это имя хранимой процедуры.

Ниже приведен пример вывода:

Получить Данные Все: "ТЕКСТ" "Процедура Usp_Get_Blob
"(
"P_DOC_ID INT,
"P_DOC_TEXT OUT BLOB)
"as
- начинайте!--9--> "выберите B1 в p_doc_text
- от блобтеста!--9--> "где ID = p_doc_id;
- конец;


единственный способ увидеть, существует ли процедура в базе данных, - это запрос DBA_OBJECTS. Недостатком здесь является то, что только администратор имеет доступ к этому представлению. Второй лучше, используя all_objects. ALL_OBJECTS показывает объекты, для которых у вас есть какие-то привилегии. USER_OBJECTS показывает только ваши собственные объекты.


выберите * из USER_SOURCE где type= 'процедура' и name= ' my_stored_procedure.'