You are on page 1of 20

Captulo 6

SAP Open SQL

6-2 SAP Open SQL

Entidades e seus Atributos

N do cliente Apelido Primeiro nome Dados bancrios Ocupao

Marca Modelo Cor Cilindrada

6-3 SAP Open SQL

Chave primria de uma tabela

CHAVE conjunto mnimo de atributos cujo valor identifica inequivocamente cada ocorrncia da entidade

N do cliente Apelido Primeiro nome Dados bancrios Ocupao B.I.

Marca Modelo Cor Cilindrada

6-4 SAP Open SQL

Chaves candidatas de uma tabela

Entre as chaves possveis escolhe-se uma

CHAVE PRIMRIA. Todas


as outras so consideradas

CHAVES CANDIDATAS.

N do cliente Apelido Primeiro nome Dados bancrios Ocupao B.I.

Marca Modelo Cor Cilindrada

6-5 SAP Open SQL

A instruo SELECT na forma SELECT SINGLE

Chave 1

Chave 2

Texto SELECT SINGLE * FROM <tabela> WHERE <Chave 1> = 10 AND <Chave 2> = B. Ao especificar inequivocamente a totalidade da chave da tabela garantimos que nunca ser devolvido mais do que um registro.

10

Texto 3

10

Texto 2

20

Texto 3

6-6 SAP Open SQL

SELECT SINGLE - sintaxe

SELECT SINGLE * FROM <tabela> WHERE <campo chave 1> = campo 1> AND <campo chave 2> = <campo 2> AND <campo chave n> = <campo n >.

Expresses Utilizadas SINGLE pressupe somente um registro vlido, ento expresses como <campo> >= <valor> no so utilizadas porque retornam mais de 1 registro que preenche as condies. Tenha cuidado ao montar a expresso em acessos SQL do tipo SINGLE.

6-7 SAP Open SQL

A instruo SELECT na forma SELECT ENDSELECT

Chave 1 Chave 2 Texto 10 A Texto 3

SELECT * FROM tabela WHERE


<Texto> = Texto 3. WRITE:/ . .

ENDSELECT.

10

Texto 2
Quando o critrio de seleo de registros no especifica inequivocamente a chave na sua totalidade, existe a possibilidade de a instruo devolver um n indeterminado de registros. Os registros selecionados vo sendo disponibilizados para processamento um a um dentro de um loop SELECT ENDSELECT.

20

Texto 3

6-8 SAP Open SQL

SELECT ENDSELECT - sintaxe

SELECT * FROM <tabela>


WHERE campo_1 operador relacional <variavel_1> AND ( campo_2 operador relacional <variavel_2> OR campo_3 operador relacional <variavel_3> ) . AND campo_n operador relacional <variavel_n>.

ENDSELECT.

<operador relacional >: EQ GE LE NE GT LT = >= ou => <= ou =< <> ou >< > <

SY-DBCNT = n

6-9 SAP Open SQL

Sintaxe: intervalos, templates, listas

SELECT * FROM <tabela> WHERE <campo da tabela> BETWEEN <campo 1> AND <campo 2>

LIKE <templates com os caracteres % e _>

IN (<campo 1>, <campo 2>, ... , <campo n>)

% representa qualquer string de caracteres e _ representa um nico caracter

6-10 SAP Open SQL

Instruo SELECT - exemplo

Estrutura da tabela TABNA SHOW TABNA


Campo TABNA-COUNTRY TABNA-ID ... TABNA-NAME1 CHAR 25 Tipo CHAR CHAR Comprimento 3 8

rea de trabalho da tabela TABNA

COUNTRY ID ...

NAME1

TABLES: TABNA. SELECT * FROM TABNA. WRITE: / TABNA-COUNTRY, TABNA-ID, TABNA-NAME1, ... . ENDSELECT.

6-11 SAP Open SQL

Cdigo de retorno SY-SUBRC

SY-SUBRC

?
= 0 foi encontrado pelo menos um registro = 4 no foi encontrado qualquer registro = 8 a chave no foi completamente especificada em um SELECT SINGLE, o registro encontrado pode no ser o nico que satisfaria a condio.

6-12 SAP Open SQL

Instruo SELECT INTO TABLE

SELECT * FROM <tabela> INTO TABLE <tabela interna> ou INTO CORRESPONDING FIELDS OF TABLE <tabela interna>

WHERE <campo 1 da tabela> <operador relacional> <campo 1> AND ( <campo 2 da tabela> <operador relacional> <campo 2> OR <campo 3 da tabela> <operador relacional> <campo 3> ) . . AND <campo n da tabela> <operador relacional> <campo n>.

SY-DBCNT = 1

6-13 SAP Open SQL

Instruo SELECT APPENDING TABLE

SELECT * FROM <tabela> APPENDING TABLE <tabela interna>| APPENDING CORRESPONDING FIELDS OF TABLE <tabela interna>

WHERE AND ( OR .. AND

<campo_1> <operador relacional> <variavel_1> <campo_2> <operador relacional> < variavel_ 2> <campo_3> <operador relacional> < variavel_ 3> ) <campo_n> <operador relacional> < variavel_ n>.

appending table = tabela tem a mesma estrutura appending corresponding fields of table = tabela tem estrutura diferente

SY-DBCNT = 1

6-14 SAP Open SQL

Seleo por registros em tabelas internas

SELECT * FROM <tabela> FOR ALL ENTRIES IN <tabela interna>

WHERE AND OR . . . AND

<campo 1 da tabela> <operador relacional> <campo 1> ( <campo 2 da tabela> <operador relacional> <campo 2> <campo 3 da tabela> <operador relacional> <campo 3> )

<campo n da tabela> <operador relacional> <campo n>.

ENDSELECT.

SY-DBCNT = n
Campos da tabela interna e adicionalmente outros

6-15 SAP Open SQL

Questes de performance

Ir buscar BD apenas os campos necessrios. Vantagem : uso de menos memria. SELECT lifnr FROM lfa1 INTO (lfa1-lifnr).

Os dados repetidos podem ser eliminados da seleco atravs da adio DISTINCT. SELECT DISTINCT lifnr FROM lfa1.

Funes de agregao evitam manipulao desnecessria dos dados. SELECT COUNT( DISTINCT bukrs) MAX(bukrs) MIN(bukrs) INTO (var1, var2, var3).

6-16 SAP Open SQL

Construo dinmica da clusula WHERE

SELECT * FROM <tabela> WHERE (<tabela interna>)


<campo 1 da tabela> <operador relacional> <campo 1> AND (<campo 2 da tabela> <operador relacional> <campo 2>

OR <campo 3 da tabela> <operador relacional> <campo 3> ) ... AND <campo n da tabela> <operador relacional> <campo n>.

Tabela interna

ENDSELECT.

Restries: Como valores apenas so admitidos literais e no variveis; No permitido o uso da clusula IN nesta sintaxe;

6-17 SAP Open SQL

Construo dinmica do nome da tabela

SELECT * FROM (<tabela>) WHERE . . .

ENDSELECT.

<tabela interna >


DATA: BEGIN OF TABINT OCCURS 10, TABELA(8), END OF TABINT, VAR TYPE I. Incio do ciclo de leitura tabela interna SELECT COUNT(*) FROM (TABINT-TABELA) INTO VAR. WRITE:/VAR. Fim do ciclo de leitura tabela interna

LFA1 LFB1 LFC1 ...

6-18 SAP Open SQL

Estudo dos Formatos de Select em ABAP

REPORT Z00SELECT. TABLES : SCARR. DATA: BEGIN OF TMP OCCURS 0. INCLUDE STRUCTURE SCARR. DATA : END OF TMP.

SELECT * FROM SCARR WHERE <clausulas>. APPEND SCARR TO TMP. ENDSELECT.

PARA AREA DE TRABALHO SCARR DA WORK AREA SCARR PARA TABELA INTERNA TMP.

SELECT * FROM SCARR WHERE <clausulas>. PARA AREA DE TRABALHO SCARR TMP = SCARR. PREENCHE AREA DE TRABALHO TMP APPEND TMP. TABELA INTERNA TMP *no usar esta forma de select, embora seja de sintaxe correta ENDSELECT.

SELECT * FROM SCARR WHERE <clausulas>. MOVE-CORRESPONDING SCARR TO TMP. APPEND TMP. ENDSELECT. SELECT * FROM SCARR INTO TABLE TMP WHERE <clausulas>.

PARA AREA DE TRABALHO SCARR PREENCHE WORK AREA TMP DA WORK AREA TMP PARA TABELA TMP

DIRETO PARA TABELA TMP.

6-19 SAP Open SQL

Estudo dos Formatos de Select em ABAP

REPORT Z00SELECT. TABLES : SCARR. DATA: BEGIN OF TMQ OCCURS 0. INCLUDE STRUCTURE SCARR. DATA : FIELD_A(20) TYPE C, FIELD_B(20) TYPE C, FIELD_C(20) TYPE C, END OF TMQ.

SELECT * FROM SCARR INTO CORRESPONDING FIELDS OF TMQ WHERE <clausulas>. APPEND TMQ. ENDSELECT.

PARA AREA DE TRABALHO TMQ PARA TABELA INTERNA TMQ

SELECT * FROM SCARR INTO CORRESPONDING FIELDS OF TABLE TMQ WHERE <clausulas>.

DIRETO PARA TABELA TMQ

SELECT * FROM SCARR WHERE <clausulas>. PARA AREA DE TRABALHO SCARR MOVE-CORRESPONDING SCARR TO TMQ. PREENCHE WA TMQ APPEND TMQ. DA WA TMP PARA TABELA TMQ ENDSELECT.

6-20 SAP Open SQL

Estudo dos Formatos de Select em ABAP

INSTRUO
SELECT INTO TABLE TMP SELECT INTO CORRESPONDING FIELDS OF TABLE TMP SELECT INTO TMP SELECT INTO CORRESPONDING FIELDS OF TMP

ONDE ESCREVE
TABELA INTERNA TMP TABELA INTERNA TMP AREA DE TRABALHO TMP AREA DE TRABALHO TMP

You might also like