Condividi tramite


Sintassi per un'istruzione SELECT in SAP

Le sezioni seguenti descrivono le specifiche grammaticali per l'implementazione di query SELECT sul provider di dati .NET Framework per mySAP Business Suite. Si noti che in diversi casi la sintassi è leggermente diversa dalla sintassi Transact-SQL di base.

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'  

Dove:

  • <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

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

    Le condizioni e le espressioni supportate sono:

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

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

    Dove <const> = integer | real | string | ? | NULL | xml_element.

    Valori per la parola chiave OPTION

    È possibile specificare le opzioni come OPTION '<option>', dove <option> = 'no_conversion' | 'batchsize <size>' | 'disabledatavalidation'

  • Opzione no_conversion :

    • Se viene usata l'opzione no_conversion , i campi nella tabella vengono esposti usando i tipi .NET equivalenti. Per informazioni sull'equivalente .NET dei tipi di dati SAP, vedere Tipi di dati SAP di base.

    • Se l'opzione no_conversion non viene utilizzata e se un campo non dispone di un'uscita di conversione definita, tali campi nella tabella vengono esposti usando i tipi .NET equivalenti. Per informazioni sull'equivalente .NET dei tipi di dati SAP, vedere Tipi di dati SAP di base.

    • Quando l'opzione no_conversion non viene usata e se un campo ha un'uscita di conversione definita, tali campi nella tabella vengono esposti come stringa .NET.

  • Se impostato su dimensioni> batchsize<, l'esecuzione dell'istruzione SELECT determina l'esecuzione di più chiamate al sistema SAP e, in ogni chiamata, vengono recuperati solo <il> numero di record. Ad esempio, se si specifica "batchsize 100", la query SELECT recupera 100 record solo in ogni chiamata al sistema SAP. Se le dimensioni> batchsize < non vengono specificate, viene utilizzato il valore predefinito 10.000 per le dimensioni del batch. Si noti che è necessario specificare un valore ottimale per le dimensioni del batch in base alla memoria fisica del computer e al numero di righe nel sistema SAP. L'errore nella specifica di un valore ottimale per le dimensioni del batch può causare eccezioni di memoria insufficiente.

  • Se impostato su disabledatavalidation, il provider di dati per SAP non convalida i valori presenti nelle colonne DATS, TIMS e NUMC, ma li espone come stringa.

    Ciò è utile negli scenari in cui ADO.NET client non riescono a recuperare dati da una tabella SAP con dati non validi nelle colonne DATS, TIMS e NUMC. Poiché SAP consente la presenza di dati non validi nelle colonne DATS, TIMS e NUMC, ADO.NET client che tentano di leggere i dati non saranno in grado di analizzare i dati non validi e genererà un'eccezione. Se l'opzione disabledatavalidation è impostata nella query SELECT, il provider di dati per SAP non analizza i dati non validi, ma li estrae come stringhe.

Importante

È sempre necessario specificare i valori per la parola chiave OPTION all'interno di virgolette singole, ad esempio "disabledatavalidation".

Per istruzioni di esempio, vedere Esempi di istruzione SELECT.

Sintassi dei predicati

Di seguito viene specificata la grammatica per l'uso dei predicati in un'istruzione 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']'  

Considerazioni sulla chiamata a un'istruzione SELECT

Questa sezione elenca i punti da tenere presenti quando si usa l'istruzione SELECT con il provider di dati per SAP.

  • Quando si specificano valori di data e ora in parametri o query, specificare i valori come stringa. Specificare stringhe di data e ora nel formato data-ora SAP.

    • SAP date format:AAAAMMGG

      Ad esempio, la data 10 novembre 2004 in una query SAP è espressa "20041110".

      La data 10 novembre 2004 in sapParameter p1 è la stringa p1. Value='20041110'.

    • SAP time format: HHMMSS

      Ad esempio, l'ora 10:34:32 in una query SAP è espressa "103432".

      L'ora 10:34:32 in sapParameter p2 è la stringa p2. Value='103432'.

      Per un'istruzione SELECT, il provider di dati per SAP restituisce DATE i valori di campo come oggetti .NET System.DateTime e restituisce TIME i valori di campo come System.TimeSpan oggetti . Se il valore dell'oggetto SAP DATE è minore del valore minimo consentito SQL Server (1/1/1753), il provider di dati per SAP restituisce questo valore minimo, 1/1/1753.

  • Nella clausola TOP di una query SELECT, quando si usano i caratteri speciali "#", "^", "&" e "%" prima o dopo un numero intero, i caratteri speciali vengono ignorati, anche se non viene generato alcun messaggio di errore. Ad esempio, nella clausola TOP di una query SELECT vengono ignorati gli elementi seguenti:

    #5, 5^, %5%, o &5

    Tuttavia, l'uso di questi caratteri tra interi, come in 5$5, genera un errore.

  • I nomi di colonna restituiti in uno schema per una tabella vengono restituiti come tutti i caratteri maiuscoli. Ad esempio, un set di risultati di query nel campo Last Name restituisce l'intestazione LAST NAMEdi colonna . Per evitare conflitti di univocità, è consigliabile usare tutte le istruzioni SELECT maiuscole.

  • Nella clausola LIKE di una query SELECT solo il segno di percentuale , "%" (per qualsiasi stringa di zero o più caratteri) e il carattere di sottolineatura "_" (per qualsiasi singolo carattere), sono caratteri speciali consentiti. Tutti gli altri caratteri speciali vengono considerati valori stringa e vengono ignorati.

  • Il provider di dati per SAP usa il Z_EXTRACT_DATA_OO RFC per eseguire query SELECT nel sistema SAP. RFC supporta la lettura dei dati dalle tabelle che soddisfano le condizioni seguenti:

    • TabClass per la tabella è TRANSP, CUSTER o POOL.

    • TabClass è VIEW e ViewClass è D o P.

      Assicurarsi che l'istruzione SELECT legga i dati dalle tabelle che soddisfano queste condizioni.

  • I valori dei tipi di dati che possono accettare più di 255 caratteri, ad esempio STRING, RAWSTRING, LRAW, VARC e LCHAR non possono essere usati in una query SELECT. Il provider di dati per SAP usa un RFC personalizzato fornito con l'adattatore SAP, Z_EXTRACT_DATA_OO, per eseguire query SELECT nel sistema SAP. Questo RFC personalizzato non supporta alcun tipo di dati che può richiedere più di 255 caratteri.

  • Il numero massimo di colonne o campi supportati in un'istruzione SELECT è 1000.

  • Il numero massimo di predicati supportati in una clausola WHERE è 100.

  • La selezione dello stesso campo più volte nella stessa istruzione SELECT non è supportata. L'RFC personalizzato (Z_EXTRACT_DATA_OO) usato dal provider di dati per SAP rimuove i campi duplicati dall'istruzione prima dell'esecuzione. Ad esempio, questa istruzione:

    SELECT BUKRS, BUKRS, BUKRS from T001

    viene eseguito come se fosse scritto come nell'istruzione seguente:

    SELECT BUKRS from T001

  • Il provider di dati per SAP non supporta nomi alias duplicati in un'istruzione SELECT. Di conseguenza, l'istruzione SELECT seguente genera un errore:

    SELECT KUNNR AS [MYKNA1], JMJAH AS MYKNA1 from KNA1 where KUNNR LIKE 'T-S62A08' AND JMJAH=1995  
    
  • Il provider di dati per SAP non supporta un'istruzione SELECT con nomi di colonna duplicati. Di conseguenza, l'istruzione SELECT seguente genera un errore:

    SELECT KUNNR AS [MYKNA1], KUNNR AS MYKNA2 from KNA1 where MYKNA2='T-S62A08'  
    
  • SAP non archivia i valori NULL nelle tabelle. Di conseguenza, il provider di dati per SAP non supporta un valore "IS NULL" in un'istruzione SELECT. Di conseguenza, l'istruzione SELECT seguente genera un errore:

    SELECT NAME1, PSTLZ  from KNA1 where CITY IS NULL AND NAME1 LIKE '%MODE%'  
    
  • Il provider di dati per SAP non supporta una clausola ORDER BY in un'istruzione SELECT. Di conseguenza, l'istruzione SELECT seguente genera un errore:

    SELECT NAME1  AS [MYNAME],  LAND1, KUNNR  from KNA1 where NAME1 LIKE '%MODE%'  ORDER BY NAME1  ASC  
    
  • Il provider di dati per SAP non supporta la specifica di un asterisco (*) per selezionare tutti i campi in una tabella SAP. Di conseguenza, l'istruzione SELECT seguente genera un errore:

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

    Per selezionare tutti i campi, è necessario specificare singolarmente i nomi dei campi.

  • Come parte dell'istruzione SELECT, è possibile specificare un file in cui verrà scritto l'output dell'istruzione SELECT. Tuttavia, se il file di output si trova in una condivisione di rete, assicurarsi che l'account del servizio SAP in cui è in esecuzione il servizio SAP disponga dell'autorizzazione di scrittura per la condivisione di rete. Ad esempio:

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

    Nell'esempio precedente, l'account del servizio SAP deve disporre dell'autorizzazione di scrittura per la condivisione di rete con il nome "condivisione".

  • Un'istruzione SELECT che usa il provider di dati per SAP supporta i nomi dei parametri per i valori degli argomenti in una query SELECT. Tuttavia, assicurarsi di seguire queste regole in relazione ai nomi dei parametri:

    • Nella query SELECT un simbolo "@" deve precedere il nome del parametro.

    • Il simbolo "@" deve essere seguito da un carattere alfabetico (A-Z o a-z).

    • Il nome del parametro può contenere caratteri alfanumerici (A-Z, a-z o 0-9) e caratteri speciali. Gli unici caratteri speciali che possono essere inclusi nel nome del parametro sono il carattere di sottolineatura "_" e hash "#".

  • Quando si esegue una query SELECT in una vista, assicurarsi che tutte le colonne chiave primaria della tabella di base siano presenti anche nella vista. Inoltre, come procedura, è necessario contrassegnare le colonne come colonne chiave primaria nella visualizzazione.

    Se le colonne chiave primaria non sono presenti nella vista, una query SELECT nella vista genererà un'eccezione.

  • Quando si esegue una query SELECT in una tabella per selezionare i campi di tipo LRAW, assicurarsi di selezionare il campo PREC corrispondente. Inoltre, il campo PREC deve essere visualizzato immediatamente prima del campo LRAW nella clausola SELECT.

    Ogni campo LRAW in una tabella ha un campo PREC corrispondente che archivia la lunghezza dei dati nel campo LRAW. Se si specifica solo il campo LRAW nella clausola SELECT senza il campo PREC, è possibile che vengano estratti dati non corretti.

  • In un sistema SAP, i confronti dei caratteri fanno distinzione tra maiuscole e minuscole. Pertanto, le due query seguenti possono restituire risultati diversi.

    SELECT * FROM KNA1 WHERE LAND1 LIKE 'D%'  
    

    e

    SELECT * FROM KNA1 WHERE LAND1 LIKE 'd%'  
    

    Assicurarsi di usare i casi corretti quando si inquadra una query selezionata. Inoltre, in un sistema SAP, non tutte le colonne possono contenere caratteri minuscoli o maiuscoli. È possibile usare l'interfaccia utente utente SAP per scoprire se una colonna in una tabella archivia caratteri minuscoli o maiuscoli. Per istruzioni sull'uso della GUI SAP, vedere Determinazione del fatto che una colonna archivia valori minuscoli o maiuscoli.

  • La condizione WHERE è supportata solo per il confronto di un valore di campo con un valore di dati e non con un altro valore del campo tabella. Poiché il provider di dati per SAP supporta una sola query SELECT di tabella, le query dei campi di tabella nelle condizioni di join devono usare la condizione join per supportare la stessa.

  • Una condizione di join deve contenere un nome di tabella.

    Di seguito è riportata un'istruzione SELECT corretta

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

    Di seguito è riportata un'istruzione SELECT non corretta

    select A.x, B.y from A inner join B on m = n  
    
  • In una condizione di join, la tabella sinistra in una condizione di join deve trovarsi sul lato sinistro della condizione e la tabella destra della condizione di join deve essere specificata sul lato destro della condizione di join.

    Di seguito è riportato il modo corretto per specificare una condizione di join:

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

    Di seguito è riportato un modo errato per specificare una condizione di join:

    select A.x, B.y from A inner join B on B.n = A.m  
    
  • Un'istruzione SELECT può contenere solo una condizione "uguale a" in una clausola JOIN. Ad esempio:

    select * from spfli inner join sflight on spfli.carrid = sflight.carrid  
    
  • Un'istruzione SELECT non recupera colonne di tipo STRING dal sistema SAP.

  • Un'istruzione SELECT deve contenere solo un singolo JOIN. Ad esempio:

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

Vedere anche

Informazioni sul provider di dati .NET Framework per mySAP Business Suite