programing

저장 프로시저가 있는지 확인하는 방법은 무엇입니까?

muds 2023. 8. 29. 21:03
반응형

저장 프로시저가 있는지 확인하는 방법은 무엇입니까?

인터넷을 검색해보니 저장 프로시저가 있는지 확인하기 위해 다음 스니펫을 사용하는 게시물이 있습니다.

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

절차가 있는지 확인할 수 있는 다른 방법이 있습니까?

추가할 편집 내용:

SQL Server ways를 게시하기 전에 Oracle ways를 찾고 있습니다.

대안:

사용자_절차:

SELECT *
  FROM USER_PROCEDURES
 WHERE object_name = 'MY_STORED_PROCEDURE'

사용자_객체:

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;

또는 SP를 다음과 같이 호출할 수 있습니다.

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'

데이터베이스에 절차가 있는지 확인하는 유일한 방법은 쿼리하는 것입니다.DBA_OBJECTS여기서 단점은 DBA만 이 보기에 액세스할 수 있다는 것입니다.두 번째로 좋은 것은 all_objects를 사용하는 것입니다.ALL_OBJECTS에는 사용자에게 권한이 있는 개체가 표시됩니다.USER_OBJECTS사용자 자신의 개체만 표시합니다.

SQL*PLUS, ODBC 테스트에서 아래 쿼리를 실행합니다.

all_source WHERE name='에서 텍스트를 선택MY_PROCESS' 라인별 주문

여기서 MY_PROCEDure는 저장 프로시저 이름입니다.

다음은 샘플 출력입니다.

데이터 모두 가져오기: "TEXT" "PROCESSure Usp_Get_Blob"
"(
"P_DOC_ID INT,
"P_DOC_TEXT OUT BLOB)
"로서
"점심적인
p_doc_text에서 B1을 선택합니다.
처음부터
여기서 ID = p_doc_id;
"끝;"

위의 방법으로는 저장 프로시저를 찾을 수 없습니다.

이유: 저장 프로시저가 패키지 내부에 있습니다.Oracle은 패키지를 사용하여 하나의 모듈에 여러 저장 프로시저를 수집합니다.

이렇게 하면 저장 프로시저와 테이블에 저장된 해당 내용이 표시됩니다.

select
   name c1,
   text c2
from
   dba_source
where
   name = upper('procedure_name')
order by
   line asc;  

USER_SOURCE에서 *를 선택합니다. 여기서 ='를 입력합니다.PROCEDURE' 및 name='my_procedure_procedure'.

언급URL : https://stackoverflow.com/questions/5721474/how-to-check-if-a-stored-procedure-exist

반응형