Hello,
 I am using
Server :
    SAPDB 7.3.0.29
    on a WIN 2000 Professional
Client :
    Win ME
    Python (ActivePython) 2.2.2
    SAPDB-API Python 7.4.3.12a

My Problem:
 I try to use SapDB_Result.getLastSerial() from an INSERT-Statement.
When I create the table and insert a row I get a SapDB_Result.
When I create a trigger on insert for this table and then insert a row I
get a 1.
The trigger updates a field in the inserted row.

My questions:
Is this a bug?
Is there another way to generate the value for the field COUNTER by the
database?

Any help is appreciated.
Christian Wende


Here is my source which I used for testing.

import sys
import sapdb
import time

user = 'TEST'
pwd = 'TEST'
dbname = 'tst'
host = '192.168.70.74'


# connect to db
session = sapdb.connect (user, pwd, dbname, host, 'yes')

try:
 stmt = 'DROP TABLE "TBL_TEST"'
 result = session.sql(stmt)
except:
 pass

stmt = 'CREATE TABLE "TBL_TEST"'
stmt = stmt + '('
stmt = stmt + ' ID  Fixed (10,0)  DEFAULT  SERIAL (1),'
stmt = stmt + ' NAME  Char (30) ASCII,'
stmt = stmt + ' COUNTER smallint  default 0,'
stmt = stmt + ' PRIMARY KEY ("ID"),'
stmt = stmt + ' UNIQUE (NAME, COUNTER) '
stmt = stmt + ')'
result = session.sql(stmt)

# insert with COUNTER set by program
stmt = 'INSERT INTO "TBL_TEST" (NAME, COUNTER) VALUES (\'Name\', 1)'
result = session.sql(stmt)

# insert with COUNTER set by program
stmt = 'INSERT INTO "TBL_TEST" (NAME, COUNTER) VALUES (\'Name\', 2)'
result = session.sql(stmt)
print 'result without trigger'
#print result.getLastSerial()
print result

# create trigger that generates a the next value for Zaehler
stmt = 'CREATE TRIGGER trig_tbl_Test '
stmt = stmt + 'FOR "TBL_TEST" '
stmt = stmt + 'AFTER INSERT '
stmt = stmt + 'EXECUTE '
stmt = stmt + '('
stmt = stmt + ' VAR iCounter INT;'
stmt = stmt + ' '
stmt = stmt + ' SELECT COUNT(Name) '
stmt = stmt + ' INTO :iCounter '
stmt = stmt + ' FROM TEST."TBL_TEST" '
stmt = stmt + ' GROUP BY Name '
stmt = stmt + ' HAVING :NEW.NAME = NAME;'
stmt = stmt + ' '
stmt = stmt + ' UPDATE TEST."TBL_TEST" '
stmt = stmt + ' SET COUNTER = :iCounter '
stmt = stmt + ' WHERE :NEW.NAME = NAME '
stmt = stmt + '  AND :NEW.COUNTER = COUNTER;'
stmt = stmt + ' '
stmt = stmt + ')'

result = session.sql(stmt)

# insert with COUNTER set by database (trigger)
stmt = 'INSERT INTO "TBL_TEST" (NAME) VALUES (\'Name\')'
result = session.sql(stmt)
print 'result with trigger'
#print result.getLastSerial()
print result

session.release ()
print '\nSession released\n\n'




_______________________________________________
sapdb.general mailing list
[EMAIL PROTECTED]
http://listserv.sap.com/mailman/listinfo/sapdb.general

Reply via email to