ADO.NET을 사용하여 오라클 패키지 내 프로시저의 저장 프로시저 메타데이터 가져오기
표준 ADO를 사용하여 Oracle 패키지 내에 선언된 프로시저에 대한 저장 프로시저 메타데이터(프로시저 이름, 파라미터 유형, 파라미터 이름 등)를 구하려고 합니다.NET API - DbConnection.Schema 전화를 받습니다.저는 ODP 드라이버를 사용하고 있습니다.
패키지가 'Packages' 및 'PackageBodies' 메타데이터 컬렉션에 나열되어 있습니다.procedure 파라미터는 'Arguments' 및 'ProcedureParameters' 컬렉션에 나타납니다.패키지 메타데이터를 통해 절차 정보를 얻을 수 있는 방법이 없습니다.프로시저에 파라미터가 없더라도 이 프로시저에 대한 'ProcureParameters' 컬렉션에 행이 있습니다.
질문:절차 메타데이터를 얻으려면 'ProcedureParameters' 컬렉션을 쿼리하고 필요한 패키지 이름을 가진 항목을 검색해야 합니까?그러면 파라미터 정보를 바탕으로 절차 메타데이터를 구성할 수 있습니다.동일한 정보를 얻을 수 있는 더 짧은 또는 더 빠른 방법이 있습니까?
ADO를 사용해서 어떻게 이걸 얻었는지 모르겠어요.NET, 그러나 다음과 같이 데이터베이스를 직접 조회하여 이 정보를 얻을 수 있습니다.
SELECT *
FROM SYS.DBA_PROCEDURES
WHERE OBJECT_TYPE = 'PACKAGE' AND
OBJECT_NAME = '<your package name here>' AND
PROCEDURE_NAME IS NOT NULL;
위의 쿼리를 실행하면 PROCEDURE_NAME이 포함된 결과 집합이 나타납니다. 패키지 이름과 PROCEDURE_NAME이 지정된 경우 다음 쿼리를 사용하여 매개 변수 정보를 찾을 수 있습니다.
SELECT *
FROM SYS.ALL_ARGUMENTS
WHERE PACKAGE_NAME = '<your package name here>' AND
OBJECT_NAME = '<PROCEDURE_NAME from query above>';
나누어서 즐겨요.
Bob의 도움을 받아 패키지 내에 정의된 저장 프로시저 목록을 얻기 위해 다음 쿼리를 사용했습니다.
SELECT a.OBJECT_NAME,p.PROCEDURE_NAME FROM SYS.ALL_OBJECTS a, SYS.ALL_PROCEDURES p WHERE a.OBJECT_NAME = p.OBJECT_NAME AND a.OBJECT_TYPE = 'PACKAGE' AND a.OWNER = '" + ownerName + "' AND p.PROCEDURE_NAME IS NOT NULL"
특정 사용자에 대해 저장된 모든 프로시저를 반환합니다.그러면 'ProcedureParameters' 컬렉션을 사용하여 파라미터 정보를 얻을 수 있습니다.
참고: SYS를 쿼리하지 마십시오.DBA_Procedures 테이블.쿼리를 실행하는 데 사용하는 사용자 자격 증명에 해당 테이블에 대한 'select' 권한이 없을 수 있습니다.
언급URL : https://stackoverflow.com/questions/2857753/obtain-stored-procedure-metadata-for-a-procedure-within-an-oracle-package-using
'IT' 카테고리의 다른 글
Python에서 open과 codecs.open의 차이 (0) | 2023.09.15 |
---|---|
Oracle에서 각 그룹의 최대값을 얻는 방법은 무엇입니까? (0) | 2023.09.15 |
urlib2HTTP 오류: HTTP 오류 403: 금지됨 (0) | 2023.09.15 |
everyauth vs passport.js? (0) | 2023.09.15 |
LXD 공유 /var/lib/mysql을 호스트에서 컨테이너로 공유하고 사용자/그룹을 매핑합니다. (0) | 2023.09.15 |