官术网_书友最值得收藏!

Applying dynamic Open SQL

The Open SQL statement components may be specified statically or dynamically. This applies to database read statement SELECT, as well as data manipulation statements such as INSERT and UPDATE. The primary emphasis of this recipe will be on dynamic specifications of the various components of the SELECT statement. The previous recipe saw some usage of the dynamic SQL in the SELECT statement, where the table name, the target area internal table (pointed to by a field symbol), and the number rows to read using UP TO addition were specified dynamically. In addition to these, the GROUP BY, the ORDER BY, and WHERE conditions may be specified dynamically.

In this recipe, we will create a program that will take input from the user and create dynamic specifications for the where condition and the order by clause. (For simplicity's sake we emphasize on the dynamic where and order by clauses and keep the table name as spfli).

Getting ready

We will create a program that will contain a selection screen, which will allow you to take input from the user. We will create two blocks on the selection screen, namely Where and Order by.

Getting ready

The table to be considered for this example is spfli. The Where Clause block has one checkbox (WHERE1) used for specifying the component of the WHERE condition. Also for the Order By Clause, we have two radio buttons—orderby1 and orderby2.

How to do it...

For creating a program based on dynamic SQL, follow these steps:

  1. Declare two string variables where_cond and order_by for specification of the dynamic where condition and order by criteria, respectively.
    How to do it...
  2. Next, the if statements are added for checking the options selected by the user. In this part, we will make sure that the correct criteria/condition is filled in the defined string variables.
    How to do it...
  3. For the ORDER BY criteria, if the user selects the first option (orderby1—no sorting), no code is added/executed. If the user has entered the sort criteria on the screen (field ordby_f) using the second radio button (orderby2), the entered name is assigned to the order_by string.
  4. Similarly, for the Where Clause formulation, the checkbox selection is checked. If the checkbox is selected, the entered field name (field1) is concatenated with EQ and the value entered (value1).
    How to do it...
  5. Finally, the most important portion is added. The select statement is written using the string variables, where_cond and order_by. We make sure that select is not executed if where_cond is empty (using a check statement).
    How to do it...
  6. The data is read and stored in the t_spfli internal table, and outputted to the user using the loop and write statements.
  7. It is also necessary to catch the cx_sy_dynamic_osql_error exception in case the select statement's where conditions and order by sort criteria are incorrect. Any exception occurring is caught, and the relevant message text is written using the exception class cx_sy_dynamic_osql_error.

How it works...

In the dynamic Open SQL program, there is one select statement executed that prints and fetches the data that is to be read from the database. The program checks the input entered by the user. If the where condition variable is empty, the program does not display any records from the table.

Suppose the user enters values for field1 and the value1.

How it works...

Then, after the execution of the if statements related to the where condition, the where_cond variable will contain the corresponding criteria to be passed to the select statement.

How it works...

The value1 variable is passed on to the where condition and the system, at runtime, evaluates their values in order to get the correct data from the database.

Similarly for the order by criteria, when the user specifies none as the sorting by, an empty string is passed to the select statement. This has no effect on the sorting, and the data is displayed as residing in the database table.

There's more...

We may use field symbols and references as shown in the previous recipe in conjunction with the code of this recipe in order to make the program work for any database table.

主站蜘蛛池模板: 成安县| 泸水县| 九江市| 会同县| 资中县| 昌乐县| 清徐县| 海丰县| 翁牛特旗| 石屏县| 德安县| 南部县| 白河县| 厦门市| 兴业县| 蓝田县| 阿鲁科尔沁旗| 镇坪县| 福海县| 夏河县| 财经| 江口县| 密云县| 双柏县| 渝中区| 宝清县| 镇安县| 永兴县| 乳山市| 多伦县| 瓮安县| 奉节县| 泾川县| 建宁县| 洛阳市| 灵丘县| 柘荣县| 伊川县| 岑溪市| 邯郸市| 长子县|