I am hereby reposting what I submitted to this list 3 weeks ago.

The appended ESQL program creates 2 tables X and Y.
During creation of the second table the following error occurs:

Duplicate table name:Y(22) Errorcode = -6000, ISAM = 0

This is strange since the table Y does not exist.

Furthermore, dropping multiple tables or creating/dropping
multiple synonyms also doesn't work.

We are using SAP DB 7.3.00.24 on Debian Linux 3.0 (woody).

Any glues?

Regards,

CTB
-- 
_______
\o/|\o/   Claus-Thomas Buhl
   |      Diplom-Informatiker
\_____/   mailto:[EMAIL PROTECTED]

H.E.I. GmbH | Wimpfener Strasse 23 | D-68259 Mannheim
Fon: +49-(0)621-795141 | Fax: +49-(0)621-795161 | mailto:[EMAIL PROTECTED]
http://www.h-e-i.de && http://www.hei.biz && http://www.radpage.com
/* copyright (c) 2002 H.E.I. GmbH Mannheim */

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <assert.h>

EXEC SQL BEGIN DECLARE SECTION;

EXEC SQL END DECLARE SECTION;

#define HANDLE_ERROR(s) if (Error()) printf("%s: %s\n",s, ErrorMsg())

int
Error (void)
{
   return (sqlca.sqlcode!=0 ? 1 : 0);
}

#define RESET_ERROR sqlca.sqlcode=0

char *
ErrorMsg (void)
{
    char buffer[1000];

    if (sqlca.sqlcode!=0) {
        sprintf (buffer,"%s(%d) Errorcode = %ld, ISAM = %ld",
        sqlca.sqlerrmc,sqlca.sqlerrml,
        sqlca.sqlcode,sqlca.sqlerrd[1]);
        return (strdup(buffer));
    }
    assert(0);
}

static int connected=0;

int
Connect (char *Host,
         char *Instance,
         char *User,
         char *Passwd)
{
  EXEC SQL BEGIN DECLARE SECTION;
        char *username;
        char *password;
        char *host;
        char *dbn;
  EXEC SQL END DECLARE SECTION;

  RESET_ERROR;

  username = (char *)User; password = (char *)Passwd; host=(char *)Host;
  dbn = (char *) Instance;
  if (host==NULL || host[0]==0) host="localhost";

  EXEC SQL SET SERVERDB :dbn ON :host;
  HANDLE_ERROR("set serverdb");
  if (sqlca.sqlcode!=0) return 1;

  EXEC SQL CONNECT :username IDENTIFIED BY :password
  ISOLATION LEVEL 30;
  HANDLE_ERROR("connect");
  if (sqlca.sqlcode!=0) return 1;

  connected=1;

  return 0;
}

void
Commit (void)
{
  RESET_ERROR;
  EXEC SQL COMMIT;
}

void
RollBack (void)
{
  RESET_ERROR;
  EXEC SQL ROLLBACK;
}


int
Update  (char * sqlstmt)
{
  EXEC SQL BEGIN DECLARE SECTION;
     char * stmt;
  EXEC SQL END DECLARE SECTION;
    char * c;

    RESET_ERROR;

    stmt = sqlstmt;
    EXEC SQL PREPARE stmtupd FROM  :stmt;
    HANDLE_ERROR("prepare");
    if (sqlca.sqlcode!=0){return 1;}

    EXEC SQL DESCRIBE stmtupd;
    HANDLE_ERROR("describe");
    if (sqlca.sqlcode!=0){return 1;}


    EXEC SQL EXECUTE stmtupd USING DESCRIPTOR;
    HANDLE_ERROR("execute");
    if (sqlca.sqlcode!=0 && sqlca.sqlcode!=100) {
      return 1;
    }
    return 0;
}

int
Disconnect  (void)
{
  RESET_ERROR;

  if (!connected) {return 1;}

  EXEC SQL commit work release;
  HANDLE_ERROR("disconnect");
  if (sqlca.sqlcode!=0){return 1;}
  connected=0;

  return 0;
}

int main (int argc, char *argv[])
{
  if (argc!=5) {
    fprintf(stderr, "usage: %s Host Instance User Password\n", argv[0]);
    exit(1);
  }

  if (Connect(argv[1],argv[2],argv[3],argv[4])) { exit(1);}
  if (Update("create table X (f integer)")) { RollBack(); goto disconn;}
  if (Update("create table Y (f integer)")) { RollBack(); goto disconn;}
  Commit();

disconn:
  exit (Disconnect());
}
# copyright (c) 2002 H.E.I. GmbH Mannheim

SAPDB_HOME      = /usr/sapdb/depend
SAPDB_INSTANCE  = PRODDB
SAPDB_HOST      = localhost
SAPDB_LIBS      = -lm -L$(SAPDB_HOME)/lib -lpcr -lsqlca
CPC=cpc

CFLAGS=-g

testcr2:        testcr2.o
        $(CC) -o testcr2 testcr2.o $(SAPDB_LIBS)

testcr2.o:      testcr2.c
        $(CC) $(CFLAGS) -c -I$(SAPDB_HOME)/incl $<

testcr2.c: testcr2.cpc
        $(CPC) -c -d $(SAPDB_INSTANCE) -n $(SAPDB_HOST) -u dba,dba $*

clean:
        rm -f testcr2 *.o testcr2.c

Reply via email to