12
Generated by Jive on 2016-06-08+02:00 1 ABAP Development: ABAP News for 7.40, SP08 - Open SQL Posted by Horst Keller 8 Oct, 2014 The most important news for Open SQL in ABAP 7.40, SP08 are as follows: Inline Declarations after INTO You might like this one. From 7.40, SP08 on you can place inline declarations with the declaration operator DATA( ... ) that was introduced with 7.40, SP02 after INTO. DATA id TYPE scarr-carrid. cl_demo_input=>request( CHANGING field = id ). SELECT SINGLE carrname AS name, carrid AS id FROM scarr WHERE carrid = @id INTO @DATA(result). cl_demo_output=>display( result ). Or for a table SELECT carrname AS name, carrid AS id FROM scarr INTO TABLE @DATA(result). cl_demo_output=>display( result ). Either an elementary data object, a structure, or an internal table is declared depending on the results set defined in the SELECT list. See the documentation for details of the type construction. SQL Expressions The SQL expressions introduced with 7.40, SP05 into the SELECT list were enhanced with 7.40, SP08 as follows: You can use SQL expressions after GROUP BY You can use SQL expressions together with aggregates

Abap News for 740 Sp08 Open SQL

Embed Size (px)

DESCRIPTION

sap abap

Citation preview

Page 1: Abap News for 740 Sp08 Open SQL

Generated by Jive on 2016-05-25+02:001

ABAP Development: ABAP News for 7.40,SP08 - Open SQL

Posted by Horst Keller 8 Oct, 2014

The most important news for Open SQL in ABAP 7.40, SP08 are as follows:

Inline Declarations after INTO

You might like this one. From 7.40, SP08 on you can place inline declarations with the declaration operator

DATA( ... ) that was introduced with 7.40, SP02 after INTO.

DATA id TYPE scarr-carrid.

cl_demo_input=>request( CHANGING field = id ).

SELECT SINGLE carrname AS name, carrid AS id

FROM scarr

WHERE carrid = @id

INTO @DATA(result).

cl_demo_output=>display( result ).

Or for a table

SELECT carrname AS name, carrid AS id

FROM scarr

INTO TABLE @DATA(result).

cl_demo_output=>display( result ).

Either an elementary data object, a structure, or an internal table is declared depending on the results set

defined in the SELECT list. See the documentation for details of the type construction.

SQL Expressions

The SQL expressions introduced with 7.40, SP05 into the SELECT list were enhanced with 7.40, SP08 as

follows:

• You can use SQL expressions after GROUP BY• You can use SQL expressions together with aggregates

Page 2: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:002

• You can use SQL expressions as argument of aggregates• You can use a seached CASE expression besides the simple CASE

Example for a searched case:

SELECT num1, num2,

CASE WHEN col1 < 50 AND col2 < 50 THEN @both_l

WHEN col1 >= 50 AND col2 >= 50 THEN @both_gt

ELSE @others

END AS group

FROM demo_expressions

ORDER BY group

INTO TABLE @DATA(results).

Column Specification

In the SELECT list, you can specify all columns of a data source using the syntax data_source~* from 7.40,

SP08 on. This can be handy when working with joins.

SELECT scarr~carrname, spfli~*, scarr~url

FROM scarr INNER JOIN spfli ON scarr~carrid = spfli~carrid

INTO TABLE @DATA(result).

Position of INTO

Did you realize the position of INTO in the above examples? I positioned it after the other clauses. This was not

possible before. From 7.40, SP08 on, the INTO clause can and should (haha) be used after the other clauses

of a SELECT statement. The additions UP TO n ROWS, BYPASSING BUFFER, and CONNECTION that are

not treated as clauses must then be placed after the INTO clause.

The rationale behind this change is, that the INTO clause is not part of standard SQL but defines the data

interface between SQL and ABAP. In order to enable future enhancements in the SQL part of Open SQL, e.g.

UNION, the INTO clause has to be removed from the SQL part.

Removal of Restrictions and New Restrictions

Page 3: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:003

Some restrictions have been removed. E.g. from 7.40, SP08 on you can place a minus sign in front of an

operator of an arithmetic expression in the SELECT list, you can carry out a simple CASE for aggregates, you

can use LIKE and IN (...) in join conditions after ON, you can specify a subquery after WHERE dynamically.

But if you use any of the new things listed here, as already for SP05, the syntax check for Open SQL is carried

out in a strict mode, where stricter syntax rules apply. E.g. you must use comma separated lists and the

escape symbol @ in front of host variables. By this, at least in Open SQL ABAP enforces a release dependent

deprecation concept in a downward compatible way. Now what do you think about that?52044 Views

Horst Keller in response to Marco Bohmbach on page 325 May, 2016 5:37 PM

In fact there is a very good chance for SQL-functions UPPER and LOWER ...

Marco Bohmbach25 May, 2016 5:07 PM

Is there a chance to get a case insensitive open sql search? It would be useful in association with odata.

Horst Keller in response to Aasim Khan on page 320 Apr, 2016 6:03 PM

Please, simply have look into the documentation, this restriction is clearly described there:

• The expressions cannot contain any or ABAP literals as operands, with the exception of

statically identifiable constants or literals with the• data type i with any content, but not as an argument of the or of the function.• data type c with length 1 and the content "X" or a blank, but not as an argument of

the function.

Aasim Khan20 Apr, 2016 12:27 PM

Hello Horst,

We're on 740/SP13 where the below SELECT statement with GROUP BY..CASE works perfectly fine.

Page 4: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:004

However, when I use a string expression in GROUP BY..CASE, it gives me an error for the below SELECT

statement.

Page 5: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:005

Does this mean, GROUP BY..CASE works only for numeric expressions and not for string?

Michael Calekta in response to Horst Keller on page 525 Feb, 2016 5:33 PM

Thanks for clearing this point - should have remembered, that the documentation has been updated as well ...

silly me.

Horst Keller in response to Michael Calekta on page 525 Feb, 2016 5:26 PM

No need to assume, you can read it here

"INTO TABLE @DATA(itab) declares a itab ... with an ":

No exceptions from that rule.

Michael Calekta

Page 6: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:006

25 Feb, 2016 4:58 PM

Do I assume right, that when I code:

SELECT * FROM t001

INTO TABLE @DATA(lt_t001).

that the resulting table is of the type STANDARD TABLE WITH EMPTY KEY, or does the table inherit the

primary keys of the database-table?

If I used the ORDER BY clause - would I then get a SORTED TABLE?

Stefan Schmöcker in response to Horst Keller on page 622 Dec, 2015 10:37 AM

Hmm - the SAPGUI doesn't seem to be the problem. I installed the very latest GUI-Patch ( 7.40 Patch 6 ) wich

was released just in these days and the problem remains.

Since I get the same coloring using Eclipse maybe it's not a GUI-Problem at all. Any ideas what else might

cause this? It's quite annoying to see correct code being marked incorrect.

Horst Keller in response to Stefan Schmöcker on page 620 Dec, 2015 4:43 PM

Yes, some new version should do it ...

Stefan Schmöcker19 Dec, 2015 7:11 PM

Hello Horst,

I am finally able to use the SP08 features. But even though the new position of the INTO-Clause works fine for

the syntaxchecker, the editor doesn't really seem to like it and marks it as faulty.

Do I need a newer SAPGUI version than 740, Patch 5?

Horst Keller in response to Johann Fößleitner on page 617 Nov, 2015 10:26 AM

Hello Johann,

This is a known bug that came in with 7.40, SP08 (kernel 7.42) and is solved with note 2127182.

Horst

Page 7: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:007

Johann Fößleitner17 Nov, 2015 9:26 AM

Hello Horst,

we have Release 7.40 SP11. I wonder of the result of the following SQL Expression:

SELECT CASE WHEN type = '1' THEN 'A'

WHEN type = '2' THEN 'BBB'

ELSE 'CC'

END AS group,

partner,

partner_guid

FROM but000

INTO TABLE @DATA(lt_result)

ORDER BY group.

The first column of lt_result is a CHAR, length 2! (I would expect 3 because of the 'BBB':

If I remove the "ELSE" of CASE, then the column has the correct length of 3.

Is that correct?

Regards, Johann Fößleitner

Horst Keller in response to Jacques Nomssi on page 813 Nov, 2015 1:17 PM

Sure, and documented too .

Strict Mode in Release 7.40, SP08

Page 8: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:008

If the content of a host variable read in an operand position needs to be converted to the

target type, this is done using the rules for lossless assignments. If the assignment cannot

be lossless, an exception is raised.

And that is good, as your example shows ...

Jacques Nomssi13 Nov, 2015 1:00 PM

Hello Horst,

is this a known issue?

PERFORM test1. " OK

PERFORM test2. " <-- SHORT DUMP SAPSQL_DATA_LOSS

FORM test1.

CONSTANTS c_langu TYPE char10 VALUE 'ENGLISH'.

DATA ls_t100 TYPE t100.

SELECT SINGLE * FROM t100 INTO ls_t100

WHERE sprsl = c_langu

AND arbgb = '06'

AND msgnr = '000'.

ENDFORM.

FORM test2.

CONSTANTS c_langu TYPE char10 VALUE 'ENGLISH'.

SELECT SINGLE * FROM t100

WHERE sprsl = @c_langu

AND arbgb = '06'

AND msgnr = '000'

INTO @DATA(ls_t100).

ENDFORM.

best regards,

JNN

Horst Keller in response to Daniel Rothmund on page 93 Jan, 2015 11:37 AM

There are indeed such plans. In the end, Open SQL should support the same functions and expressions as the

ABAP CDS - both are open and have the same code base.

Page 9: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:009

You will use the advanced view building capabilities of CDS in order to persist your model and Open SQL - well

as embedded SQL within ABAP programs.

As long as Open SQL does not offer the same functions and expressions as ABAP CDS, you can create a

CDS view that encapsulates your SELECT with a SUBSTRING function and select it with Open SQL as a

workaround.

Daniel Rothmund2 Jan, 2015 12:10 PM

One question are there any plans for SUBSTR function or LEFT / RIGHT? I don't found any infos about it in

ABAP Keyword Documentation .

f.e.

select so_id , delivery_status from snwd_so WHERE SUBSTR(so_id,1,3)='123' into table

@DATA(lt_simple_case).

In the past we must select the data from the database and then do a loop and drop out the lines which doesn't

mach the abap substr in the loop.

Regards

Horst Keller in response to Uwe Fetzer on page 920 Oct, 2014 9:54 AM

Up to now, SQL expressions (literals and host variables in the SELECT list are a special case of SQL

expressions) cannot be used together with FOR ALL ENTRIES. Simply a question of workload on the

developer. But there are plans to tackle that too.

Uwe Fetzer16 Oct, 2014 5:09 PM

Today I already wanted to use the new SQL syntax for a client report, but went into a problem.

The following two statements work (and no, this is not from the client report):

SELECT carrid,

connid,

fldate,

'X' AS test

INTO TABLE @DATA(lt_result)

FROM sflight

WHERE carrid = @carrid.

Page 10: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:0010

and

SELECT carrid,

connid,

fldate

INTO TABLE @DATA(lt_result)

FROM sflight

FOR ALL ENTRIES IN @carrids

WHERE carrid = @carrids-carrid.

But if I want to combine them, I'm getting a syntax error.

SELECT carrid,

connid,

fldate

'X' AS test

INTO TABLE @DATA(lt_result)

FROM sflight

FOR ALL ENTRIES IN @carrids

WHERE carrid = @carrids-carrid.

Description Resource Path Location Type

Host variablesand literals arenot permittedin expressionstogether with theaddition FOR ALLENTRIES.

YSTSTF00(Program)

[A4H] YSTSTF00 line 17 ABAP Syntax CheckProblem

I don't see any (good) reason why this shouldn't be allowed.

(and maybe the "together" should be placed directly after "literals" to make the message clearer because it

seems only the combination of both is not valid -> "Host variables and literals together are not permitted in

expressions with the addition FOR ALL ENTRIES.")

Christiano José Beltrão Magalhães9 Oct, 2014 9:27 PM

Great blog...

Thanks...

Daniel Rothmund in response to Horst Keller on page 119 Oct, 2014 1:31 PM

Page 11: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:0011

Ok ,

then I misunderstood the sentence:

'You might like this one. You can place inline declarations with the declaration operator DATA( ... ) that was

introduced with 7.40, SP02 behind INTO now.'

sorry

Horst Keller in response to Daniel Rothmund on page 119 Oct, 2014 1:27 PM

um, the title of the blog says "ABAP News for 7.40, SP08".

Daniel Rothmund9 Oct, 2014 1:22 PM

Hi Horst ,

i tried the :

SELECT carrname AS name, carrid AS id

FROM scarr

INTO TABLE @DATA(result).

on my 7.40 SPS7 system .

"I get a syntax error : The inline declaration "DATA(RESULT)" is not possible in this position"

Does I need SP 8 ?

Nikolay Evstigneev in response to Horst Keller on page 119 Oct, 2014 11:13 AM

Without you we would still have been in the dark about it.

Don't be overmodest

And of course, many thanks to the guys from Open SQL team.

New ABAP. M-m-m, I'm loving it (c)

Horst Keller in response to Nikolay Evstigneev on page 119 Oct, 2014 11:02 AM

Not I, but my Open SQL colleagues

Nikolay Evstigneev9 Oct, 2014 10:49 AM

Horst, it's a tremendous update!!!

One of my fellows used to work with a non-SAP system which supported such features. And he was looking

forward to getting the possibility of writing SQL queries as he had accustomed to.

Page 12: Abap News for 740 Sp08 Open SQL

ABAP Development: ABAP News for 7.40, SP08 - Open SQL

Generated by Jive on 2016-05-25+02:0012

And special thanks from me for

SELECT spfli~*

You made my day week!

Suhas Saha8 Oct, 2014 4:02 PM

Now what do you think about that?

Horst (err, i meant ABAP) is getting cooler with every release