다음을 통해 공유


SAP의 SELECT 문 구문

다음 섹션에서는 mySAP Business Suite용 .NET Framework Data Provider에 대해 SELECT 쿼리를 구현하기 위한 문법 사양에 대해 설명합니다. 몇 가지 경우에 구문은 기본 Transact-SQL 구문과 다소 다릅니다.

SELECT {TOP <const> }[0,1] <select_list>  {INTO FILE [‘file_name’ | “file_name”]   
{DELIMITED}[0,1]}[0,1]  FROM table_name  {AS alias_name }[0,1]    
{INNER JOIN table_name {AS alias_name}[0,1] ON  <Join_Condition>}[0,1]  
{ WHERE <predicate> } [0,1] {;}[0,1]   
[OPTION 'no_conversion' | 'batchsize <size>' | 'disabledatavalidation'  

위치:

  • <select_list> = [ {table_name.}[0,1]column_name { AS alias_name } [0,1] } [ 1, …n ]

  • <Join_Condition> = [Alias_name.|table_name.]column_name <expr> [Alias_name.|table_name.]column_name

  • <조건자> = [ predicate [AND|OR] predicate [between|not between] predicate | NOT predicate | ‘(‘ predicate ‘)’ | condition ]

    지원되는 조건 및 식은 다음과 같습니다.

  • <조건> = [ expr | expr [NOT | ] BETWEEN const AND const | expr [NOT | ] LIKE const ]

  • <Expr> = [ const | column_name [= | ! = | > | > = | ! > | < | < = | ! < ] const | column_name | - const | const | column_name ]

    여기서 <const> = integer | real | string | ? | NULL | xml_element.

    OPTION 키워드의 값

    옵션을 로 OPTION '<option>'지정할 수 있습니다. 여기서 <option> = 'no_conversion' | 'batchsize <size>' | 'disabledatavalidation'

  • no_conversion 옵션:

    • no_conversion 옵션을 사용하는 경우 테이블의 필드는 해당하는 .NET 형식을 사용하여 노출됩니다. SAP 데이터 형식에 해당하는 .NET에 대한 자세한 내용은 기본 SAP 데이터 형식을 참조하세요.

    • no_conversion 옵션을 사용하지 않고 필드에 변환 종료가 정의되어 있지 않으면 해당 .NET 형식을 사용하여 테이블의 해당 필드가 노출됩니다. SAP 데이터 형식에 해당하는 .NET에 대한 자세한 내용은 기본 SAP 데이터 형식을 참조하세요.

    • no_conversion 옵션을 사용하지 않고 필드에 변환 종료가 정의된 경우 테이블의 해당 필드는 .NET String으로 노출됩니다.

  • 일괄 처리 크기<>로 설정하면 SELECT 문을 실행하면 SAP 시스템에 대한 여러 호출이 발생하고 각 호출에서 레코드의 크기> 수만 <검색됩니다. 예를 들어 'batchsize 100'을 지정하면 SELECT 쿼리는 SAP 시스템에 대한 각 호출에서만 100개의 레코드를 검색합니다. batchsize <크기를> 지정하지 않으면 기본값인 10,000이 일괄 처리 크기로 간주됩니다. 컴퓨터의 실제 메모리와 SAP 시스템의 행 수를 기준으로 일괄 처리 크기에 최적 값을 지정해야 합니다. 일괄 처리 크기에 대한 최적의 값을 지정하지 못하면 메모리 부족 예외가 발생할 수 있습니다.

  • disabledatavalidation으로 설정하면 SAP용 데이터 공급자는 DATS, TIMS 및 NUMC 열에 있는 값의 유효성을 검사하지 않고 문자열로 노출합니다.

    이는 ADO.NET 클라이언트가 DATS, TIMS 및 NUMC 열에 잘못된 데이터가 있는 SAP 테이블에서 데이터를 검색하지 못하는 시나리오에서 유용합니다. SAP는 DATS, TIMS 및 NUMC 열에 잘못된 데이터를 표시할 수 있으므로 데이터를 읽으려는 ADO.NET 클라이언트는 잘못된 데이터를 구문 분석할 수 없으며 예외가 throw됩니다. SELECT 쿼리에서 disabledatavalidation 옵션을 설정한 경우 SAP용 데이터 공급자는 잘못된 데이터를 구문 분석하지 않고 문자열로 추출합니다.

중요

항상 작은따옴표 안에 OPTION 키워드(keyword) 값을 제공해야 합니다(예: 'disabledatavalidation').

예제 문은 SELECT 문의 예제를 참조하세요.

조건자 구문

다음은 SELECT 문에서 조건자를 사용하기 위한 문법을 지정합니다.

Predicate:

Predicates [AND | OR] Predicates [between|not between] Predicates | [NOT] Predicates | '(' Predicates ')' | Condition  

Condition:

Expr | LExpr [NOT] BETWEEN RExpr AND RExpr | LExpr [NOT] LIKE Const  

Expr:

LExpr [=|!=|>|>=|!>|<|<=|!<] RExpr>  

LExpr:

ColumnName  

RExpr:

Const | PlaceHolder  

ColumnName:

Column | TableName.Column | '['Column']'  

Tablename:

Table | '['Table']'  

SELECT 문을 호출할 때 고려 사항

이 섹션에서는 SAP용 데이터 공급자와 함께 SELECT 문을 사용할 때 유의해야 하는 사항을 나열합니다.

  • 매개 변수 또는 쿼리에서 날짜-시간 값을 지정할 때 값을 문자열로 제공합니다. SAP 날짜-시간 형식으로 날짜-시간 문자열을 제공합니다.

    • SAP date format:Yyyymmdd

      예를 들어 SAP 쿼리의 2004년 11월 10일 날짜는 '20041110'로 표시됩니다.

      SAPParameter p1의 2004년 11월 10일 날짜는 p1 문자열입니다. Value='20041110'.

    • SAP time format:Hhmmss

      예를 들어 SAP 쿼리의 10:34:32 시간은 '103432'로 표시됩니다.

      SAPParameter p2의 시간 10:34:32는 문자열 p2입니다. Value='103432'.

      SELECT 문의 경우 SAP용 데이터 공급자는 필드 값을 .NET System.DateTime 개체로 반환 DATE 하고 필드 값을 개체로 System.TimeSpan 반환 TIME 합니다. SAP DATE 개체의 값이 허용되는 최소 SQL Server 값()1/1/1753보다 작으면 SAP용 데이터 공급자는 이 최소값인 1/1/1753를 반환합니다.

  • SELECT 쿼리의 TOP 절에서 정수 앞이나 뒤에 특수 문자 "#", "^", "&" 및 "%"를 사용할 때는 오류 메시지가 발생하지 않지만 특수 문자는 무시됩니다. 예를 들어 SELECT 쿼리의 TOP 절에서는 다음이 무시됩니다.

    #5, 5^, %5% 또는 &5

    그러나 5$5와 같이 정수 간에 이러한 문자를 사용하면 오류가 발생합니다.

  • 테이블의 스키마에 반환된 열 이름은 모든 대문자로 반환됩니다. 예를 들어 필드 Last Name 의 쿼리 결과 집합은 열 머리글 LAST NAME를 반환합니다. 고유성 충돌을 방지하려면 SELECT 문의 모든 대문자를 사용하는 것이 좋습니다.

  • SELECT 쿼리의 LIKE 절에서는 백분율 기호인 "%"(0자 이상의 문자열) 및 밑줄 "_" (모든 단일 문자의 경우)만 허용되는 특수 문자입니다. 다른 모든 특수 문자는 문자열 값으로 간주되며 무시됩니다.

  • SAP용 데이터 공급자는 Z_EXTRACT_DATA_OO RFC를 사용하여 SAP 시스템에서 SELECT 쿼리를 수행합니다. RFC는 다음 조건을 충족하는 테이블에서 데이터를 읽을 수 있도록 지원합니다.

    • 테이블의 TabClass는 TRANSP, CUSTER 또는 POOL입니다.

    • TabClass는 VIEW이고 ViewClass는 D 또는 P입니다.

      SELECT 문이 이러한 조건을 충족하는 테이블에서 데이터를 읽는지 확인합니다.

  • STRING, RAWSTRING, LRAW, VARC 및 LCHAR와 같이 255자를 초과할 수 있는 데이터 형식의 값은 SELECT 쿼리에서 사용할 수 없습니다. SAP용 데이터 공급자는 SAP 어댑터와 함께 제공되는 사용자 지정 RFC(Z_EXTRACT_DATA_OO)를 사용하여 SAP 시스템에서 SELECT 쿼리를 수행합니다. 이 사용자 지정 RFC는 255자를 초과할 수 있는 데이터 형식을 지원하지 않습니다.

  • SELECT 문에서 지원되는 최대 열 또는 필드 수는 1000개입니다.

  • WHERE 절에서 지원되는 최대 조건자 수는 100개입니다.

  • 동일한 SELECT 문에서 동일한 필드를 여러 번 선택하는 것은 지원되지 않습니다. SAP용 데이터 공급자에서 사용하는 사용자 지정 RFC(Z_EXTRACT_DATA_OO)는 실행하기 전에 문에서 중복 필드를 제거합니다. 예를 들어 이 문은 다음과 같습니다.

    SELECT BUKRS, BUKRS, BUKRS from T001

    는 이 문처럼 작성된 것처럼 실행됩니다.

    SELECT BUKRS from T001

  • SAP용 데이터 공급자는 SELECT 문에서 중복 별칭 이름을 지원하지 않습니다. 따라서 다음 SELECT 문은 오류를 throw합니다.

    SELECT KUNNR AS [MYKNA1], JMJAH AS MYKNA1 from KNA1 where KUNNR LIKE 'T-S62A08' AND JMJAH=1995  
    
  • SAP용 데이터 공급자는 열 이름이 중복된 SELECT 문을 지원하지 않습니다. 따라서 다음 SELECT 문은 오류를 throw합니다.

    SELECT KUNNR AS [MYKNA1], KUNNR AS MYKNA2 from KNA1 where MYKNA2='T-S62A08'  
    
  • SAP는 테이블에 NULL 값을 저장하지 않습니다. 따라서 SAP용 데이터 공급자는 SELECT 문에서 "IS NULL" 값을 지원하지 않습니다. 따라서 다음 SELECT 문은 오류를 throw합니다.

    SELECT NAME1, PSTLZ  from KNA1 where CITY IS NULL AND NAME1 LIKE '%MODE%'  
    
  • SAP용 데이터 공급자는 SELECT 문의 ORDER BY 절을 지원하지 않습니다. 따라서 다음 SELECT 문은 오류를 throw합니다.

    SELECT NAME1  AS [MYNAME],  LAND1, KUNNR  from KNA1 where NAME1 LIKE '%MODE%'  ORDER BY NAME1  ASC  
    
  • SAP용 데이터 공급자는 SAP 테이블의 모든 필드를 선택하기 위해 별표(*)를 지정하는 것을 지원하지 않습니다. 따라서 다음 SELECT 문은 오류를 throw합니다.

    SELECT spfli.* from spfli inner join sflight on spfli.carrid = sflight.carrid  
    

    모든 필드를 선택하려면 필드 이름을 개별적으로 지정해야 합니다.

  • SELECT 문의 일부로 SELECT 문의 출력이 기록될 파일을 지정할 수 있습니다. 그러나 출력 파일이 네트워크 공유에 있는 경우 SAP 서비스가 실행 중인 SAP 서비스 계정에 네트워크 공유에 대한 쓰기 권한이 있는지 확인합니다. 예를 들면 다음과 같습니다.

    SELECT * into file '\\share\output.txt' from spfli inner join sflight on spfli.carrid = sflight.carrid  
    

    앞의 예제에서 SAP 서비스 계정에는 "공유"라는 이름의 네트워크 공유에 대한 쓰기 권한이 있어야 합니다.

  • SAP용 데이터 공급자를 사용하는 SELECT 문은 SELECT 쿼리에서 인수 값에 대한 매개 변수 이름을 지원합니다. 그러나 매개 변수 이름과 관련하여 다음 규칙을 준수해야 합니다.

    • SELECT 쿼리에서 "@" 기호가 매개 변수 이름 앞에 와야 합니다.

    • "@" 기호 뒤에 알파벳 문자(A-Z 또는 a-z)가 와야 합니다.

    • 매개 변수 이름에는 영숫자 문자(A-Z, a-z 또는 0-9) 및 특수 문자가 포함될 수 있습니다. 매개 변수 이름에 포함할 수 있는 유일한 특수 문자는 밑줄 "_" 및 해시 "#"입니다.

  • 보기에서 SELECT 쿼리를 실행할 때 기본 테이블의 모든 기본 키 열도 보기에 있는지 확인합니다. 또한 보기에서도 열을 기본 키 열로 표시해야 합니다.

    기본 키 열이 보기에 없으면 보기의 SELECT 쿼리에 예외가 발생합니다.

  • 테이블에서 SELECT 쿼리를 실행하여 LRAW 형식의 필드를 선택하는 경우 해당 PREC 필드를 선택해야 합니다. 또한 PREC 필드는 SELECT 절의 LRAW 필드 바로 앞에 나타나야 합니다.

    테이블의 모든 LRAW 필드에는 LRAW 필드에 데이터 길이를 저장하는 해당 PREC 필드가 있습니다. PREC 필드 없이 SELECT 절에 LRAW 필드만 지정하면 잘못된 데이터가 추출될 수 있습니다.

  • SAP 시스템에서 문자 비교는 대/소문자를 구분합니다. 따라서 다음 두 쿼리는 다른 결과를 반환할 수 있습니다.

    SELECT * FROM KNA1 WHERE LAND1 LIKE 'D%'  
    

    And

    SELECT * FROM KNA1 WHERE LAND1 LIKE 'd%'  
    

    선택 쿼리를 프레이밍할 때 올바른 사례를 사용해야 합니다. 또한 SAP 시스템에서는 모든 열에 소문자 또는 대문자를 포함할 수 없습니다. SAP GUI를 사용하여 테이블의 열에 소문자 또는 대문자가 저장되어 있는지 확인할 수 있습니다. SAP GUI 사용에 대한 지침은 열이 소문자 또는 대문자를 저장하는지 여부를 확인합니다.

  • WHERE 조건은 다른 테이블 필드 값이 아닌 일부 데이터 값과 필드 값을 비교하는 경우에만 지원됩니다. SAP용 데이터 공급자는 하나의 테이블 SELECT 쿼리만 지원하므로 조인 조건의 테이블 필드 쿼리는 조인 조건을 사용하여 동일한 항목을 지원해야 합니다.

  • 조인 조건에는 테이블 이름이 포함되어야 합니다.

    다음은 올바른 SELECT 문입니다.

    select A.x, B.y from A inner join B on A.m = B.n  
    

    다음은 잘못된 SELECT 문입니다.

    select A.x, B.y from A inner join B on m = n  
    
  • 조인 조건에서 조인 조건의 왼쪽 테이블은 조건의 왼쪽에 있어야 하며 조인 조건의 오른쪽 테이블을 조인 조건의 오른쪽에 지정해야 합니다.

    다음은 조인 조건을 지정하는 올바른 방법입니다.

    select A.x, B.y from A inner join B on A.m = B.n  
    

    다음은 조인 조건을 지정하는 잘못된 방법입니다.

    select A.x, B.y from A inner join B on B.n = A.m  
    
  • SELECT 문은 JOIN 절에 "equal to" 조건만 포함할 수 있습니다. 예를 들면 다음과 같습니다.

    select * from spfli inner join sflight on spfli.carrid = sflight.carrid  
    
  • SELECT 문은 SAP 시스템에서 STRING 형식의 열을 검색하지 않습니다.

  • SELECT 문은 하나의 JOIN만 포함해야 합니다. 예를 들면 다음과 같습니다.

    select * from spfli inner join sflight on spfli.carrid = sflight.carrid  
    

참고 항목

.NET Framework Data Provider for mySAP Business Suite 정보