Firebird PHP生成器用于自动增量

时间:2014-08-17 11:57:30

标签: php generator firebird

我有一个密钥ID,它是Firebird数据库的一个自动递增的唯一ID,我有一个firebird生成的生成器,已经完美运行了,我想在db中为新记录编写ID。所以基本上我想用这个增量器生成器得到正确的值,但我不知道如何调用。 PRODUCT_SORSZAM是发电机。

$q = ibase_query("SELECT * FROM PRODUCT_SORSZAM");
echo $q;

4 个答案:

答案 0 :(得分:1)

我这样做的方法是使用触发器来填充" target"上的ID字段。表,然后在INSERT查询上使用RETURNING,如下所示:

触发器(让我们假设TNAME是包含目标ID字段的表,而TNAME_GEN_ID是生成器):

CREATE TRIGGER TNAME_INSERT FOR TNAME ACTIVE BEFORE INSERT POSITION 0 AS
BEGIN
   IF (NEW.ID IS NULL) THEN NEW.ID = GEN_ID(TNAME_GEN_ID, 1);
END

然后插入查询将类似于:

INSERT INTO TNAME (FIELD_1, FIELD_2, ...) VALUES (VALUE_1, VALUE_2, ...)
RETURNING ID

这仅适用于Firebird 2.0(使用" VALUES"),或者,如果您想使用单例选择作为插入值Firebird 2.1的值来源。 文档:http://www.firebirdsql.org/refdocs/langrefupd21-insert.html

希望这有帮助。

答案 1 :(得分:1)

CREATE TABLE test
(
field1 integer not null,
field2 char(10),
PRIMARY KEY (field1)
);

CREATE GENERATOR gen_test_id;
inserting values:

INSERT INTO test (field1, field2) VALUES (gen_id(gen_test_id, 1), 'testme');

答案 2 :(得分:0)

您可以使用以下内容获取下一个生成器值:

SELECT GEN_ID(PRODUCT_SORSZAM,1) FROM RDB$DATABASE; Or 
SELECT NEXT VALUE FOR PRODUCT_SORSZAM FROM RDB$DATABASE;

我假设PRODUCT_SORSZAM是生成器的名称,而不是表的名称。

答案 3 :(得分:-1)

CREATE TABLE test ( field1 integer not null, field2 char(10), PRIMARY KEY (field1) );

CREATE GENERATOR gen_test_id; inserting values:

INSERT INTO test (field1, field2) VALUES (gen_id(gen_test_id, 1), 'testme');

只是一个想法:)

相关问题