dbTalk Databases Forums  

Arrays in v9.7

comp.databases.ibm-db2 comp.databases.ibm-db2


Discuss Arrays in v9.7 in the comp.databases.ibm-db2 forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
span3d
 
Posts: n/a

Default Arrays in v9.7 - 08-26-2010 , 06:23 AM






Can we use arrays to send a list from a cli app ( to stored proc)? I
was able to find an example in java and it works fine, but I am
looking for declaration in cli.

Reply With Quote
  #2  
Old   
Serge Rielau
 
Posts: n/a

Default Re: Arrays in v9.7 - 09-01-2010 , 03:18 PM






On 8/26/2010 7:23 AM, span3d wrote:
Quote:
Can we use arrays to send a list from a cli app ( to stored proc)? I
was able to find an example in java and it works fine, but I am
looking for declaration in cli.
Yes you can. It was a late arrival though which explains but not excuses
the skimpy docs.

Here's a quick example:

CREATE TYPE VARCHAR20_ARR AS VARCHAR(20) ARRAY[10] %

CREATE PROCEDURE ARRAY_RETRIEVE
(
IN LIST_OF_FIRST_NAMES VARCHAR20_ARR,
OUT LIST_LEN INTEGER,
OUT LAST_NAME_ARRAY VARCHAR20_ARR)

READS SQL DATA
DETERMINISTIC
LANGUAGE SQL

VAR: BEGIN

SELECT ARRAY_AGG(LAST_NAME), COUNT(LAST_NAME)
INTO LAST_NAME_ARRAY, LIST_LEN
FROM (SELECT LAST_NAME FROM EMPLOYEES,
UNNEST(LIST_OF_FIRST_NAMES) AS FNAME_LIST(FNAME)
WHERE FIRST_NAME=FNAME_LIST.FNAME);

COMMIT WORK ;

END
%


SQLHANDLE hdbc; /* connection handle */
SQLHSTMT stmt; /* statement handle*/
rc = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &stmt);
int i=0;
char first_name[10][20];
char last_name[10][20];
int list_len=0;
SQLHANDLE hIPD;
SQLHANDLE hAPD;
int size= 10;
int returned_size;
//Bind input/output parameters
if (SQLBindParameter(stmt, ++i, SQL_PARAM_INPUT, SQL_C_CHAR,
SQL_VARCHAR, 20, 0, first_name, 20, NULL)==SQL_SUCCESS
Quote:
| SQLBindParameter(stmt, ++i, SQL_PARAM_OUTPUT, SQL_C_LONG,
SQL_INTEGER, 0, 0, list_len, 0, NULL)==SQL_SUCCESS
| SQLBindParameter(stmt, ++i, SQL_PARAM_OUTPUT, SQL_C_CHAR,
SQL_VARCHAR, 20, 0, last_name, 20, NULL)==SQL_SUCCESS){

if( SQLGetStmtAttr(stmt,
SQL_ATTR_IMP_PARAM_DESC,&hIPD,SQL_IS_INTEGER,NULL) ==SQL_SUCCESS &&
SQLGetStmtAttr(stmt, SQL_ATTR_APP_PARAM_DESC,&hAPD,SQL_IS_INTEGER,NULL)
== SQL_SUCCESS{

if(SQLSetDescField(hIPD,1, SQL_DESC_CARDINALITY, &size,
SQL_IS_INTEGER==SQL_SUCCESS &&
SQLSetDescField(hAPD,3, SQL_DESC_CARDINALITY, &size,
SQL_IS_INTEGER==SQL_SUCCESS &&
SQLSetDescField(hAPD,3, SQL_DESC_CARDINALITY_PTR, &returned_size,
SQL_IS_INTEGER==SQL_SUCCESS){

if (SQLPrepare(stmt, (SQLCHAR*)"CALL ARRAY_RETRIEVE(?, ?, ?)",
SQL_NTS)==SQL_SUCCESS){

rc = SQLExecute(stmt);
}
}
}
}
rc = SQLFreeHandle(SQL_HANDLE_STMT,stmt);


Cheers
Serge
--
Serge Rielau
SQL Architect DB2 for LUW
IBM Toronto Lab

Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.3
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.