fixed Issue 1522:Trigger for primary key on oracle database
This commit is contained in:
@@ -1 +1 @@
|
||||
Version 2.5.1-stable+timestamp.2013.06.16.06.56.07
|
||||
Version 2.5.1-stable+timestamp.2013.06.16.07.06.28
|
||||
|
||||
+6
-4
@@ -3024,6 +3024,7 @@ class OracleAdapter(BaseAdapter):
|
||||
|
||||
def create_sequence_and_triggers(self, query, table, **args):
|
||||
tablename = table._tablename
|
||||
id_name = table._id.name
|
||||
sequence_name = table._sequence_name
|
||||
trigger_name = table._trigger_name
|
||||
self.execute(query)
|
||||
@@ -3035,18 +3036,19 @@ class OracleAdapter(BaseAdapter):
|
||||
diff_val NUMBER;
|
||||
PRAGMA autonomous_transaction;
|
||||
BEGIN
|
||||
IF :NEW.id IS NOT NULL THEN
|
||||
IF :NEW.%(id)s IS NOT NULL THEN
|
||||
EXECUTE IMMEDIATE 'SELECT %(sequence_name)s.nextval FROM dual' INTO curr_val;
|
||||
diff_val := :NEW.id - curr_val - 1;
|
||||
diff_val := :NEW.%(id)s - curr_val - 1;
|
||||
IF diff_val != 0 THEN
|
||||
EXECUTE IMMEDIATE 'alter sequence %(sequence_name)s increment by '|| diff_val;
|
||||
EXECUTE IMMEDIATE 'SELECT %(sequence_name)s.nextval FROM dual' INTO curr_val;
|
||||
EXECUTE IMMEDIATE 'alter sequence %(sequence_name)s increment by 1';
|
||||
END IF;
|
||||
END IF;
|
||||
SELECT %(sequence_name)s.nextval INTO :NEW.id FROM DUAL;
|
||||
SELECT %(sequence_name)s.nextval INTO :NEW.%(id)s FROM DUAL;
|
||||
END;
|
||||
""" % dict(trigger_name=trigger_name, tablename=tablename, sequence_name=sequence_name))
|
||||
""" % dict(trigger_name=trigger_name, tablename=tablename,
|
||||
sequence_name=sequence_name,id=id_name))
|
||||
|
||||
def lastrowid(self,table):
|
||||
sequence_name = table._sequence_name
|
||||
|
||||
Reference in New Issue
Block a user