2012-11-19 60 views
1

我試圖執行一個插入語句,它具有序列號列但無法確定返回值。在cx_oracle中獲取序列號python

當我執行下面的語句沒有綁定seqvalue我得到一個錯誤。當我初始化seqvalue爲0,將其綁定的輸出爲0

代碼

col2 = 'test' 
    qry=insert into table1 (col1,col2) value (seq1.nextval,:col2) returning col1 into :seqvalue 

    cur.excute(qry,:col2) 

請提供您的投入。

+0

是否這樣? [Oracle:如何獲取剛剛插入的行的序列號?](http://stackoverflow.com/a/361309/222914) –

+0

[Oracle:可能的重複:如何獲得行的序列號插入?](http://stackoverflow.com/questions/361304/oracle-how-do-i-get-the-sequence-number-of-the-row-just-inserted) – Junuxx

回答

0

您可以嘗試使用bind變量並準備將使用與SEQ.nextval相同的oracle方法的語句。 步驟:

  1. 使用cx_Oracle建立數據庫連接。

  2. 從數據庫連接中獲取遊標。

  3. 聲明變量:將被推入Oracle插入語句。 例如低於:

var_CHANGES = '測試更改' var_COMMENTS = '測試'

  • 使與下一行字符作爲顯示例如低於在聲明:
  • statement = "INSERT"     + "\n" + \ 
     
         "INTO CHANGE_LOG" + "\n" + \ 
     
         "(CHANGE_LOG_ID"  + "\n" + \ 
     
         ", CHANGE_TYPE"    + "\n" + \ 
     
         ", CHANGE_DATE"   + "\n" + \ 
     
         ", COMMENTS)"    + "\n" + \ 
     
         "VALUES"     + "\n" + \ 
     
         "(CHANGE_LOG_SEQ.nextval" + "\n" + \ 
     
         ", :bCHANGE_TYPE"    + "\n" + \ 
     
         ", sysdate"    + "\n" + \ 
     
         ", :bCOMMENTS)"

    然後,使用正則表達式替換格式的查詢:

    stmt = re.sub('\s+',' ',stmt.replace('\n',' ').replace('\r',''))

  • 執行使用cursor.execute查詢。按照上面的例子:
  • cursor.execute(statement, bCHANGE_TYPE=var_CHANGES  \ 
     
             , bCOMMENTS = var_COMMENTS)

  • 執行提交語句
  • 所以,在這裏可以使用SQL NEXTVAL()和sysdate一樣在正常的SQL查詢中。 這應該爲你做這項工作。