mi piacerebbe chiamare una stored procedure , che ha un parametro di tipo TABLE
.
Come posso fare questo utilizzando (11g1) in un'applicazione Windows C++?Come chiamare una stored procedure con un parametro di tipo di tabella
Ecco la definizione della stored procedure:
FUNCTION am_send(
p_caFnr IN VARCHAR2,
p_TabBgr IN DSKS_BGR_TAB,
p_caTextout OUT VARCHAR2)
RETURN NUMBER;
e le tipologie utilizzate:
create or replace
TYPE DSKS_BGR_TAB,
AS TABLE OF DSKS_BGR
create or replace
TYPE DSKS_BGR
(BgrNr VARCHAR2(3),
TrId VARCHAR2(8))
quello che ho fatto finora:
ho creato un rappresentazione dell'oggetto di tipo DSKS_BGR
utilizzando th e OTT Utility.
Il mio codice finora:
Environment* env = Environment::createEnvironment(Environment::OBJECT);
try
{
Connection *con = env->createConnection("xxxxx", "xxxxx", "xxxxx");
Statement* statement = con->createStatement("BEGIN :1 := am_send(:2, :3, :4); END;");
statement->registerOutParam(1, OCCINUMBER);
statement->setString(2, "Test");
// ?? DSKS_BGR_TAB
statement->registerOutParam(4, OCCISTRING, 1000);
statement->execute();
int result = statement->getNumber(1);
string textOut = statement->getString(4);
env->terminateConnection(con);
}
catch(const SQLException &exc)
{
cout << exc.getErrorCode() << exc.getMessage();
}
Environment::terminateEnvironment(env);
non ho idea di come impostare il parametro TABLE
.
Penso che ci sarà una perdita di memoria - è necessario liberare manualmente la memoria con delete per ogni elemento nel vettore. Io so che è un buon esempio, solo che ho perso così tanto tempo a cercare perdite di memoria ultimamente, mi dispiace per essere fastidioso:/ – user1645975
@ user1645975: Hai perfettamente ragione: c'era una perdita di memoria nell'esempio sopra. Fisserò il codice di esempio (ufficiale oracolo) qui sopra. –
Sì, mi ricordo quegli esempi, alcuni anni fa, quando non avevo idea di perdite di memoria e di come stavo pensando: "sicuramente non ci può essere un errore qui, è un esempio ufficiale ..." – user1645975