我有一个密钥ID,它是Firebird数据库的一个自动递增的唯一ID,我有一个firebird生成的生成器,已经完美运行了,我想在db中为新记录编写ID。所以基本上我想用这个增量器生成器得到正确的值,但我不知道如何调用。 PRODUCT_SORSZAM是发电机。
$q = ibase_query("SELECT * FROM PRODUCT_SORSZAM");
echo $q;
答案 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');
只是一个想法:)