Kori 4월 20일, 2022에 포스트됨 공유하기 4월 20일, 2022에 포스트됨 Docwiki에 있는 "Metadata Questions (FireDAC)"을 번역한 글: 번역일: 2022년 4월 18일 위로 가기: [DocWiki 번역] FAQ (FireDAC) 메타데이터(metadata) 추출 관련 질문과 답변을 정리한 목록이다. Q1: 데이터베이스 안에 테이블(table)이 존재하는 지를 확인하는 방법은? A: 기본 방식 2가지가 있다: 1) try FDQuery1.Open('select * from tab where 0 = 1'); Result := True; except on E: EFDDBEngineException do if E.Kind = ekObjNotExists then Result := False else raise; end; 2) var oList: TStrings; begin oList := TStringList.Create; try FDConnection1.GetTableNames('', '', ATableName, oList, [osMy, osOther, osSystem], [tkTable, tkTempTable, tkLocalTable]); Result := oList.Count > 0; finally oList.Free; end; end; 첫번째가 보다 최적화된 방식이다. Q2: Oracle에서, TFDMetaInfoQuery를 사용하여 패키지 프로시저(package procedure)를 받아낼 수 있나? A: 오라클 패키지인 PACKAGE_NAME의 프로시저(procedure) 목록을 반환하는 코드는 아래와 같다: FDMetaInfoQuery1.BaseObjectName := 'PACKAGE_NAME'; FDMetaInfoQuery1.MetaInfoKind := mkProcs; FDMetaInfoQuery1.Open; Q3: TFDMetaInfoQuery를 사용하여 인덱스(index) 이름을 얻는 방법은? A: MY_TAB 테이블용 인덱스(index) 목록을 반환하는 코드는 아래와 같다: FDMetaInfoQuery1.ObjectName := 'MY_TAB'; FDMetaInfoQuery1.MetaInfoKind := mkIndexes; FDMetaInfoQuery1.Open; Q4: 쿼리 빌더(Query Builder), 디자인-타임 에디터, 메타데이터 추출 함수 등은 현재의 스키마(schema)에 속해 있는, 즉 스키마(schema)/카탈로그(catalog)에 해당 접두사가 달려있는 오브젝트 이름들을 반환한다. 제외하는 방법은? A: 2가지 옵션이 있다: TFDConnection.GetXxxxName을 호출할 때 AFullName에 False를 지정한다; FireDAC에는 연결 정의(connection definition) 일반 파라미터가 2개 있다 - MetaCurCatalog와 MetaCurSchema이다. DBMS에 따라, 둘 중 하나 또는 둘 다 지원된다 (자세한 내용은 FireDAC Database Connectivity 참고). 만약 명시된 MetaDefCatalog 카탈로그(catalog)/MetaDefSchema 스키마(schema)에 속해 있는 오브젝트라면 오브젝트 이름에서 이 스키마(schema)/카탈로그(catalog)의 이름이 제외된다. 따라서 MetaDefCatalog/MetaDefSchema에 당신의 개발 스키마(schema)/카탈로그(catalog)의 이름을 지정하라. 그러면 애플리케이션을 다른 스키마(schema)/카탈로그(catalog)로 배포할 수 있다. Q5: Oracle 저장 프로시저(stored procedure)를 public synonym을 이용하여 호출한다, 그러나 FireDAC이 항상 해당 저장 프로시저 이름에 스키마(schema) 이를을 덛붙인다. 피하는 방법은? A: FireDAC에는 연결 정의(connection definition) 일반 파라미터가 2개 있다 - MetaCurCatalog와 MetaCurSchema이다. DBMS에 따라, 둘 중 하나 또는 둘 다 지원된다 (자세한 내용은 FireDAC Database Connectivity 참고). 여기에 '*'를 지정하면 오브젝트의 전체 이름 중 대응되는 이름 부분을 사용하지 않도록 할 수 있다. 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.