通过ODBC检索自动增量ID

时间:2011-02-24 12:44:42

标签: php oracle triggers odbc sequence

我正在为用PHP编写的遗留应用程序添加新功能,该应用程序通过ODBC functions使用Oracle 9i数据库。我创建了一个包含序列和触发器的表来生成自动递增ID。

现在,我很难找到一种方法来插入并获得生成的ID:

我是否需要对序列名称进行硬编码并在事务的其余部分使用{{1}}?即使存在并发访问,我还需要做些什么才能确保获得正确的值?

更新:为失败的尝试增加了第三点

1 个答案:

答案 0 :(得分:3)

最好的办法是将此插件编码为数据库端的PL / SQL API,它将返回您要使用的ID。 e.g。)

create function insert_yourtable(p_f1 number, p_f2 varchar2, ... p_fn varchar2)
return number
   idval number;
begin
   insert into yourtable(f1, f2,...fn)
   values (p_f1, p_f2, ...p_fn)
   returning your_id_value into idval;
   return idval;
end;
/

然后你可以将其称为准备好的声明,以获取out参数并在剩余的交易中使用该ID。

哎呀 - 刚看到“No OUT params评论......”

好的,我想你需要从UI管理它。 从表中删除触发器,执行

select yourseq.nextval from dual;

获取下一个可用键值,将其存储在本地,然后使用检索到的ID自行完成所有工作,以插入表中的ID字段。该序列将确保您在ID上具有事务安全性。

ODBC的对接实现真是太痛苦了!