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