Escolar Documentos
Profissional Documentos
Cultura Documentos
doc
SELECT
Comando SELECT..............................................................................................................................2 1. SELECT * FROM dbtab..........................................................................................................2 Adies :...............................................................................................................................................2 1a) ... WHERE Condition............................................................................................................2 1b) ORDER BY f1fn..........................................................................................................2 1c) ... UP TO n ROWS.................................................................................................................3 2) SELECT * FROM dbtab INTO TABEL itab..........................................................................3 2a) WHERE..................................................................................................................................3 2b) ORDER BY............................................................................................................................3 2c) UP TO n ROWS.....................................................................................................................3 3) SELECT * FROM dbtab APPENDING TABLE itab.............................................................3 3a) WHERE..................................................................................................................................3 3b) ORDER BY............................................................................................................................3 3c) UP TO n ROWS.....................................................................................................................3 4) SELECT SINGLE * FROM dbtab WHERE f1 = g1 AND AND fn +................................3 5) SELECT * FROM dbtab APPENDING CORRESPONDING FILEDS OF TABLE itab.....4 6) SELECT * FROM dbtab FOR ALL ENTRIES in itab WHERE.............................................4 TIPOS DE SELECT EXISTENTES E MAIS UTILIZADOS.........................................................5 1- SELECT * FROM ... <tabela>.................................................................................................5 2- SELECT * FROM <tabela> WHERE <campo> EQ <contedo>...........................................5 3- SELECT * FROM <tabela> WHERE <table field> BETWEEN <field1> AND <field2>.. . .5 4- SELECT * FROM <tabela> WHERE <table field> LIKE _R$......................................5 5- SELECT * FROM <tabela> WHERE <table field> IN ( , .)...................................5 6- SELECT * FROM <tabela> WHERE <table field> IN <internal table>................................5 7- SELECT * FROM <tabela> ORDER BY <field1> <field2> PRIM ARY KEY................5 8- SELECT * FROM <tabela> BYPASSING BUFFER.............................................................5 9- SELECT * FROM <tabela> APPENDING TABLE <internal table>.....................................6 10- SELECT * FROM <tabela> INTO TABLE <internal table>................................................6 11- SELECT INTO CORRESPONDING FIELDS OF TABLE <internal table>..................6 12- SELECT * APPENDING COREESPONDING FIELDS OF TABLE <internal table>. .....6 13- SELECT SINGLE * FROM <tabela> WHERE <campo> EQ <contedo>..........................6 14- SELECT <a1> <a2> ... INTO ( <f1>, <f2>, ) FROM <tabela> WHERE ...........6 15- SELECT MAX (campo)........................................................................................................6 16- SELECT * FROM SFLIGHT WHERE PRICE IN ITAB.....................................................7 17- SELECT * FROM (<tabela>) INTO <work area>................................................................7 18- SELECT * FROM <tabela> FOR ALL ENTRIES IN <tabela interna> ..............................7 19- SELECT carrid MIN( price ) MAX( price ) INTO (carid, minimum, maximum) ..............7
Pg.: 1/7
166569770.doc
Comando SELECT O comando select usado para acessar e selecionar dados de tabelas internas do SAP. Por existirem diversas variaes do mesmo comando, fundamental que o programador saiba o mecanismo de funcionamento de cada uma delas pois s assim poder dar ao programa uma performance satisfatria. Variaes:
1.
Seleciona dados de uma tabela SAP num processo de loop que comea no select e termina no endselect. A cada passagem pelo loop temos um elemento lido e selecionado. necessrio que se coloque aps o ENDESELCT uma condio de checagem de dados selecionados: If sy-subrc ne 0. Write: Nenhum dado foi selecionado. Endif. Se sy-subrc = 0 : pelo menos um dado foi selecionado Se sy-subrc = 4 : nenhum dados foi lido Exemplo: SELECT * FROM BSEG. ENDSELECT. If sy-subrc ne 0. Write: No tem dado na tabela BSEG. Endif. Adies :
1a)
Seleciona apenas os dados que satisfazem a condio especificada. Exemplo: SELECT * FROM T001 WHERE BUKRS EQ 0001. ENDSELECT.
1b)
ORDER BY f1fn
ORDER BY PRIMARY KEY
Organiza os dados em ordem ascendente de acordo com os campos especificados (f1fn). Exemplo: SELECT * FORM T001 ORDER BY MSGNR DESCENDING ARBGB ASCENDING.
Pg.: 2/7
166569770.doc
ENDSELECT.
1c)
... UP TO n ROWS.
Seleciona um nmero mximo de dados. Exemplo: SELECT * UP TO 100 ROWS FROM T001 WHERE... ENDSELECT.
2)
Os dados so selecionados e colocados na tabela interna itab de uma s vez. No h mais o processo de loop e portanto no h mais ENDSELECT. Os dados novos da tabela interna so gravados por cima dos antigos. importante ressaltar que o * pode ser substitudo pelos nomes dos campos da tabela, agilizando assim o processo e melhorando a performance. Exemplo: SELECT * FROM T001 INTO TABLE TAUX. Adies:
Mesmo processo do item 2, s que os dados novos so inseridos sem apagar os antigos. Exemplo: SELECT * FORM T100 APPENDING TABLE TAUX . Adies:
WHERE ORDER BY UP TO n ROWS SELECT SINGLE * FROM dbtab WHERE f1 = g1 AND AND fn +
Seleciona apenas um nico dado que satisfaas condies do where. OBS.: Neste caso todas as chaves (ndices da tabela) devem ser satisfeitos. Exemplo:
Pg.: 3/7
166569770.doc
5)
Mecanismo semelhante ao item 2, e deve ser usado quando a sintaxe do item 2 no puder ser usada. H diferenas de performance. Exemplo: SELECT * FORM T100 APPENDING CORRESPONDING FIELDS OF TABLE TAUX . Onde TAUX recebeu a estrutura da tabela T100 (commando INCLUDE STRUCTURE).
6)
Usado quando selecionamos dados de uma tabela e precisamos de dados de outra tabela para compor as condies do where. Exemplo: SELECT * FORM BSEG FOR ALL ENTRIES IN T_BKPF WHERE BUKRS = T_BKPF-BUKRS AND BELNR = T_BKPF-BELNR . Onde T_BKPF uma tabela interna que recebeu a tabela BKPF. Este tipo de comando utilizado entre tabelas internas.
Pg.: 4/7
166569770.doc
1-
Quando no se impe nenhum tipo de restrio, ocorre uma varredura seqencial dos registros da tabela. Quando se utiliza grandes tabelas, isso obviamente afeta o runtime. Performance: Select * seleciona todas as colunas de uma tabela. melhor sempre especificar as colunas, pois em caso de tabelas com muitas colunas, prejudicar a performance.
2-
L todos os registros da tabela especificada onde o campo igual ao contedo especificado. Performance: Select * Where seleciona todas as colunas de uma tabela de acordo com a condio de where. melhor sempre especificar as colunas, pois em caso de tabelas com muitas colunas, prejudicar a performance.
3-
SELECT * FROM <tabela> WHERE <table field> BETWEEN <field1> AND <field2>.
field1 = 100 e field2 = 500. pega inclusive 100 e 500. Voc trabalha com o
Exemplo: range.
4_= R %
5-
Exemplo: literais.
6-
Exemplo: DATA: begin of ITAB occurs 10, Sign(1), options(2), low like sflight-price, high like sflight-proce, End of ITAB. * Ranges: ITAB for sflight-table Move: I to itab-sign, bt to itab-option, 500 to itab-low, 1000 to itab-high. Append itab. Move: I to itab-sign, bt to itab-option, 440 to itab-low. Append itab.
7-
Obs.: Classifica a tabela interna numa rea auxiliar, sem afetar a tabela original. Evitar o uso de sorts dentro de um select. Consome mais tempo que descarregar os dados em uma tabela interna e classific-los.
8-
166569770.doc
OBS.: Select single * sempre com chave completa especificada. Particularmente do ABAP/4 Select * - procurar evitar. Informar as colunas que sero necessrias, apenas. Uso do comando extract (insert header, details) para relatrios.
9-
10-
A estrutura da tabela interna deve corresponder estrutura da tabela que est sendo acessada. O sistema l os registros em conjunto, no individualmente atravs de um LOOP e ir gravando os registros, uma a um.
11-
Neste caso a estrutura da tabela interna no precisa corresponder estrutura da tabela que est sendo acessada. Movimentar os registros para as colunas definidas na tabela interna que possuam nome igual ao da tabela acessada. Obs.: Corresponding ou appending no exisgem o endselect.
12-
L e grava (no sobrepe) os dados em uma tabela interna que possua nomes idnticos aos nomes da tabela que est sendo lida.
13-
Toda vez que se usa select single * a chave primria completa deve ser especificada. Se a chave especificada no qualificada, voc receber uma mensagem de warning e a performance ficar prejudicada. No caso de haver a necessidade de acessar um nico registro via select, as opes so: Select * ... seguido do comando EXIT ou select * ... UP TO 1 ROW. Neste caso no necessrio especificar a chave completa.
14-
SELECT <a1> <a2> ... INTO ( <f1>, <f2>, ) FROM <tabela> WHERE .
L as colunas especificadas (a1, a2). Aps INTO devero ser especificadas as reas de trabalho auxiliares (f1, f2). O nmero de colunas lidas dever ser igual ao nmero de work-aeras especificadas.
15-
AVG e SUM somente para campos numricos. No se usa endselect. Mais rpido fazer uma rotina a mo que utilizar esse comando.
Pg.: 6/7
166569770.doc
1617-
SELECT * FROM SFLIGHT WHERE PRICE IN ITAB. SELECT * FROM (<tabela>) INTO <work area>.
Exemplo: Data: begin of WA, Line(1000, end of WA. Parameters: tabname(10) default SPFLI. *** especificando o nome da tabela em tempo dinamicamente no comando select sempre consome mais tempo de CPU que especificando estatiamente no programa. Select * from (tabname) into WA. Write: . Endselect.
18-
WHERE campo1 = contedo AND WHERE campo2 = contedo . Defino uma tabela interna. Alimento os campos desta tabela interna. (move e append). No meu select campo1 e campo2 sero os campos definidos e ealimentados na tabela interna.
19-
SELECT carrid MIN( price ) MAX( price ) INTO (carid, minimum, maximum)
FROM sflight GROUP BY carrid. Todos os campos que eu quero que apaream na minha lista eu preciso especificar aps a clusula GROUP BY. (carrid, maximum e minimum so campos auxiliares. Se o nome do databease no conhecido at o runtime, no se pode especificar a clusula GROUP BY.
Pg.: 7/7