sourcetip

Oracle OLE DB Provider를 사용하는 동안 SQL 쿼리 매개 변수 매핑 문제를 해결하는 방법은 무엇입니까?

fileupload 2023. 9. 25. 22:55
반응형

Oracle OLE DB Provider를 사용하는 동안 SQL 쿼리 매개 변수 매핑 문제를 해결하는 방법은 무엇입니까?

Oracle OLE DB 프로바이더를 사용하여 매개 변수로 SQL 쿼리를 입력하려고 하면 다음 오류가 발생합니다.

SQL 명령에서 매개 변수를 추출할 수 없습니다.공급자가 명령의 매개 변수 정보를 구문 분석하는 데 도움이 되지 않을 수 있습니다.이 경우 "SQL command from variable" 액세스 모드를 사용하면 SQL 명령 전체가 변수에 저장됩니다.
추가 정보:
공급자가 매개 변수 정보를 도출할 수 없으며 SetParameterInfo가 호출되지 않았습니다.(Microsoft OLE DB Provider for Oracle)

저는 여기에 제안된 사항을 따르려고 노력했지만 무엇이 필요한지 잘 모르겠습니다.Oracle에 대한 매개 변수화된 쿼리

무슨 생각 있어요?

질문에 제시된 링크를 펼치려면:

  1. 패키지 변수 생성
  2. 패키지 변수 이름을 두 번 클릭합니다.(이를 통해 변수의 속성에 액세스할 수 있음)
  3. 'EvaluateAs' 속성 설정식' to true
  4. 식 작성기에 쿼리를 입력합니다.
  5. OLE DB 원본 쿼리를 변수에서 SQL Command로 설정

expression builder는 변수를 사용하여 '파라미터화된 쿼리'를 동적으로 만들 수 있습니다.
그래서 다음의 '정상' 쿼리는 다음과 같습니다.

select * from book where book.BOOK_ID = ?

식 작성기에 다음과 같이 쓸 수 있습니다.

"select * from book where book.BOOK_ID = " + @[User::BookID]

그런 다음 식 작성기를 사용하여 null 처리 및 데이터 변환을 수행할 수 있습니다.

Data Flow Task를 사용하고 OLE DB Source를 사용하는 경우 쿼리를 매개 변수화해야 합니다.

  1. Query statement : 오른쪽 클릭 패키지 바깥쪽 빈 영역을 클릭하고 변수를 클릭하여 Query statement : "Full"을 저장하는 변수 만들기 :

Variables

변수 창에서 변수 추가를 클릭합니다.

enter image description here

이름을 만드세요.SQL_DTFLOW_FULL쉽게 이해할 수 있는 그런. 그.variable data typeSTRING

  1. 변수를 생성하여 파라미터를 저장합니다.

즉, Query statement의 전체 내용은 같습니다.

SELECT * FROM BOOK WHERE BOOK_ID = @BookID --@BookID is SQL Parameter

위의 샘플에서, 나는 단지 하나의 파라미터를 가지고 있습니다: @Book.ID, 그래서 파라미터를 저장할 변수를 하나 만들어야 합니다.변수 추가는 쿼리에 따라 달라집니다.

ParamAdd

이름을 대라SQL_DTFLOW_BOOKID

variable data typeSTRING

따라서 SSIS를 정돈하고 변수를 이해할 수 있는 부분으로 정렬해야 합니다.

변수 이름을 다음과 같이 만드십시오.SQL_{TASK NAME}_{VariableName}

  1. 에 대한 :SQL_DTFLOW_FULL변수 1번을 클릭하고 2번 채우기를 시작합니다.문자열 블록을 사용하여 SQL 문을 올바른 SQL 문으로 만듭니다.문자열 블록은 보통 처음과 끝에 "큰따옴표"를 사용합니다.변수와 문자열 블록을 연결합니다.

Expression

식 평가를 클릭하여 결과를 표시하고 쿼리가 올바른지 확인하려면 SSMS에서 쿼리 결과를 복사하여 붙여넣습니다.

자신의 논리를 사용하여 변수가 SQL Injection에서 자유롭는지 확인합니다.(개발자 본능 활용)

  1. Data Flow Task를 열고 항목을 두 번 클릭하여 OLE DB Source Editor를 엽니다.

Data Flow

  • 합니다 Mode(데이터 액세스 )를 합니다.SQL Command From Variable
  • : 를(를) 합니다.SQL_DTFLOW_FULL
  • 미리보기를 클릭하여 작동하는지 확인합니다.

이것이 제가 SSIS 실패 사례를 예방하는 방법입니다.제가 이런 식으로 사용하기 때문에, 저는 그 문제에 대해 전혀 알지 못합니다. 아시다시피, SSIS는 뭔가 이상합니다.

of 하려면 Data Task, SQL Result ofSQL_DTFLOW_FULL변수 값을 변경할 때마다 변수가 변경됩니다.

문제는 sql 내의 주석이 /* */의 정상적인 형태로 되어 있다는 것과 [Column Name]이 아닌 "Column Name"으로 열 별칭이 있다는 것이었습니다.

제거하면 작동합니다.

또한 매개 변수 ? 문을 JOINGS가 아닌 WHERE 절 내에 두도록 노력하십시오. 그것도 문제의 일부였습니다.

언급URL : https://stackoverflow.com/questions/58540/how-to-resolve-sql-query-parameters-mapping-issues-while-using-oracle-ole-db-pro

반응형