IT

ADO.NET을 사용하여 오라클 패키지 내 프로시저의 저장 프로시저 메타데이터 가져오기

itgroup 2023. 9. 15. 20:56
반응형

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

반응형