how to access multiple output sys_refcursor?

Discussion of open issues, suggestions and bugs regarding UniDAC (Universal Data Access Components) for Delphi, C++Builder, Lazarus (and FPC)
Post Reply
dollee
Posts: 3
Joined: Wed 04 Nov 2015 13:30

how to access multiple output sys_refcursor?

Post by dollee » Tue 10 Nov 2015 07:23

It is used to connect to the Database server called Tibero ( http://www.tmaxsoft.com/us_en/tibero_us_en ) in ODBC.
I would like to receive and process multiple Ref Cursor in the "Stored Procedure".

Code: Select all

CREATE OR REPLACE PROCEDURE tid_path (tid in number,
                                      ref_cursor1       OUT SYS_REFCURSOR,
                                      ref_cursor2       OUT SYS_REFCURSOR,
                                      ref_cursor3       OUT SYS_REFCURSOR,
                                      ref_cursor4       OUT SYS_REFCURSOR )
IS
Please tell me how.

AlexP
Devart Team
Posts: 5530
Joined: Tue 10 Aug 2010 11:35

Re: how to access multiple output sys_refcursor?

Post by AlexP » Tue 10 Nov 2015 11:46

Hello,

To work with several cursors, you can use additional UniQuery components, for example:

Code: Select all

  UniQuery1.Cursor := UniStoredProc1.ParamByName('ref_cursor1').AsCursor;
  UniQuery1.Open;
  ...
  UniQueryN.Cursor := UniStoredProc1.ParamByName('ref_cursorN').AsCursor;
  UniQueryN1.Open;

dollee
Posts: 3
Joined: Wed 04 Nov 2015 13:30

Re: how to access multiple output sys_refcursor?

Post by dollee » Fri 13 Nov 2015 10:29

using native odbc command

Code: Select all

/* 1. proc test */
    _rc = SQLPrepare(_hstmt, (SQLCHAR *)"{ CALL PKG2.P(?,?,?) }", SQL_NTS);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    _rc = SQLBindParameter(_hstmt ,1, SQL_PARAM_INPUT_OUTPUT, SQL_C_ULONG,
                           SQL_CSR, 0, 0, &csr1, 0, &ind1);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    _rc = SQLBindParameter(_hstmt ,2, SQL_PARAM_INPUT_OUTPUT, SQL_C_ULONG,
                           SQL_CSR, 0, 0, &csr2, 0, &ind2);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    _rc = SQLBindParameter(_hstmt ,3, SQL_PARAM_INPUT_OUTPUT, SQL_C_ULONG,
                           SQL_CSR, 0, 0, &csr3, 0, &ind3);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    _rc = SQLExecute(_hstmt);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    _rc = SQLBindCol(_hstmt, 1, SQL_C_SLONG, &var, sizeof(SQLINTEGER), &ind1);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    /* fetch */
    _rc = SQLFetch(_hstmt);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    CuAssertIntEq(var, 1);
    _rc = SQLMoreResults(_hstmt);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    _rc = SQLFetch(_hstmt);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    CuAssertIntEq(var, 2);
    _rc = SQLMoreResults(_hstmt);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    _rc = SQLFetch(_hstmt);
    CuAssertStmtError(_rc, SQL_SUCCESS);
    CuAssertIntEq(var, 3);
    _rc = SQLMoreResults(_hstmt);
    CuAssertStmtError(_rc, SQL_NO_DATA_FOUND);
odbc provider not supported "OpenNext"

how to use SQLMoreResults ?

AlexP
Devart Team
Posts: 5530
Joined: Tue 10 Aug 2010 11:35

Re: how to access multiple output sys_refcursor?

Post by AlexP » Thu 19 Nov 2015 09:27

We will consider the possibility to add such functionality in the future.

Post Reply