Skip to Content
0
Dec 31, 2011 at 08:03 PM

SQL Statement not works using functions or subqueries-MAXDB

204 Views

Hello All,

I created an ABAP program to select information about country(table: T005) with the country names (Table: T005T). I tried to create a sql query with a sql subquery to select everything but for some reason that I don't know it doesn't work. Please find the query below.

DATA: 
resu        TYPE REF TO cl_sql_result_set ,
stmt         TYPE REF TO cl_sql_statement ,
qury        TYPE string .

           qury  = `SELECT land1, spras, `
           &&       `(SELECT landx `
           &&         `FROM SAPNSP.T005T `
           &&         `WHERE mandt = '` && sy-mandt && `' `
           &&           `AND spras = 'EN' `
           &&           `AND land1 = ? ), `
           &&       `(SELECT natio `
           &&         `FROM SAPNSP.T005T `
           &&         `WHERE mandt = '` && sy-mandt && `' `
           &&           `AND spras = 'EN' `
           &&           `AND land1 = ? ) `
           &&        `FROM SAPNSP.T005 `
           &&        `WHERE mandt = '` && sy-mandt && `' `
           &&          `AND land1 = ? `
           &&        `GROUP BY land1, spras` .

resu = stmt->execute_query( qury ) .

Well, the query above works but the fields LANDX and NATIO are in blank in ALL THE CASES, even with information registred in table T005T. So, exploring the SDN forum and after read some documents regarding ADBC, I create a function to handle this sql select and get the correctly the missing informations, but, still don't work. Please find the function below:

CREATE FUNCTION select_landx (land1 CHAR(3)) RETURNS CHAR(15)
AS
  VAR landx CHAR(15);
  DECLARE functionresult CURSOR FOR
  SELECT spras, land1, landx
     FROM SAPNSP.t005t
     WHERE spras = 'EN'
         AND land1 = :land1;
     IF $count IS NULL THEN <- | $count is always 0, my SELECT 
       BEGIN                                 it's not work but I don't know why
         CLOSE functionresult;
         RETURN NULL;
       END
     ELSE
       SET $rc = 0;
       WHILE $rc = 0 DO
       BEGIN
         FETCH functionresult INTO :landx;
       END;
     CLOSE functionresult;
     RETURN landx;

Calling the function in a SQL statement:


DATA: 
resu        TYPE REF TO cl_sql_result_set ,
stmt         TYPE REF TO cl_sql_statement ,
qury        TYPE string .
 
           qury  = `SELECT land1, spras, select_landx(?) landx `
           &&        `FROM SAPNSP.T005 `
           &&        `WHERE mandt = '` && sy-mandt && `' `
           &&          `AND land1 = ? `
           &&        `GROUP BY land1, spras` .

resu = stmt->execute_query( qury ) .

Any comments ?

Best regards,

Arthur Silva