Как проверить, существует ли хранимая процедура?
Я искал в сети, и я нашел в должности который использует следующий фрагмент, чтобы проверить, существует ли хранимая процедура:
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
показывает только ваши собственные объекты.