在Python cx_Oracle中从Oracle数据库获取序列号
我正在尝试获取Oracle序列的下一个值在Python cx_Oracle中从Oracle数据库获取序列号,python,oracle,cx-oracle,Python,Oracle,Cx Oracle,我正在尝试获取Oracle序列的下一个值 def get_change_id(): # get a sequence number for each change, this will be used to group before and after changes id = cursor_analytics.var(cx_Oracle.NUMBER) sql = "select SNAPSHOT_GENERAL_SEQ.nextval into :nex
def get_change_id():
# get a sequence number for each change, this will be used to group before and after changes
id = cursor_analytics.var(cx_Oracle.NUMBER)
sql = "select SNAPSHOT_GENERAL_SEQ.nextval into :next_id from sys.dual"
cursor_analytics.execute(sql, {"next_id":id})
change_id = id.getvalue()
return change_id
我收到以下错误消息:
回溯最近一次调用:文件C:/ariel_deltas/main.py,
第93行,在
printget\u change\u id文件C:\ariel\u deltas\snapshot.py,第130行,在get\u change\u id中
cursor_analytics.executesql,{next_id:id}cx_Oracle.DatabaseError:ORA-01740:标识符中缺少双引号
这样做是可行的,但感觉不对:
def get_change_id():
# get a sequence number for each change, this will be used to group before and after changes
sql = 'select SNAPSHOT_GENERAL_SEQ.nextval from sys.dual'
cursor_analytics.execute(sql)
for row in cursor_analytics.fetchall():
r = reg(cursor_analytics, row, False)
change_id = r.NEXTVAL
return change_id
在第二个函数中,由于在多行字符串的开头使用了四个双引号字符,而不是三个双引号字符,因此出现标识符中缺少双引号的错误: --1234 sql= 开始 ... 第四个字符是发送给Oracle的字符串的第一个字符,并且字符串中没有其他字符,因此出现了缺少双引号的错误。删除它,此功能将开始工作 第一个函数将不起作用,因为SELECT查询的INTO子句仅在PL/SQL中受支持 最后,除非您使用的是旧版本的Oracle 11g或更早版本,否则我认为您可以直接分配下一个序列值,而无需使用查询: sql= 开始 :next_id:=快照_常规_SEQ.nextval; 终止
将PL/SQL解决方案与change\u id、=cursor\u analytics.executeselect SNAPSHOT\u GENERAL\u SEQ.nextval(来自dual.fetchone)进行基准测试会很有趣。也可能是在事先设置为1之后。
def get_change_id():
# get a sequence number for each change, this will be used to group before and after changes
id = cursor_analytics.var(cx_Oracle.NUMBER)
sql = """"
BEGIN
select SNAPSHOT_GENERAL_SEQ.nextval into :next_id from sys.dual;
END
"""
cursor_analytics.execute(sql, {"next_id":id})
change_id = id.getvalue()
return change_id
def get_change_id():
# get a sequence number for each change, this will be used to group before and after changes
sql = 'select SNAPSHOT_GENERAL_SEQ.nextval from sys.dual'
cursor_analytics.execute(sql)
for row in cursor_analytics.fetchall():
r = reg(cursor_analytics, row, False)
change_id = r.NEXTVAL
return change_id