PostgreSQL:插入并获取新ID,以便在LO-BASE中使用
我想在表中添加一行:PostgreSQL:插入并获取新ID,以便在LO-BASE中使用,sql,postgresql,select,sql-insert,libreoffice-base,Sql,Postgresql,Select,Sql Insert,Libreoffice Base,我想在表中添加一行: CREATE TABLE actors ( id_act serial NOT NULL, first_name text NOT NULL, last_name text NOT NULL, CONSTRAINT actors_pkey PRIMARY KEY (id_act) ); INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks'); 使用dBeaver
CREATE TABLE actors (
id_act serial NOT NULL,
first_name text NOT NULL,
last_name text NOT NULL,
CONSTRAINT actors_pkey PRIMARY KEY (id_act)
);
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks');
使用dBeaver,此语句提供新ID:
select CurrVal(pg_get_serial_sequence('actors', 'id_act'));
对于libreofficebase,我必须添加方案的名称,这将导致
错误:列方案\u名称。表\u名称不存在
我在使用以下命令时遇到了相同的错误:
方案\名称。表\名称
方案\名称。表\名称
表名称
如何获取新ID以进行进一步的使用率计算、检查。。。?我不介意使用CurrVal或RETURNING或其他方式。但是我找不到正确的语法
谢谢大家! 最简单的选择是在INSERT查询中使用RETURNING子句: 您可以在CTE内使用insert,然后返回值:
WITH i AS (
INSERT INTO actors (first_name, last_name) VALUES ('Tom', 'Hanks')
RETURNING id_act
)
SELECT i.*
FROM i;
外部查询是一个SELECT,因此您的UI应该对它返回值感到满意
您甚至可以在此语句中继续处理—例如,通过添加更多CTE—这样您就不需要实际获取值。有三种方法可以为您提供新的id 使用串行和主键,postgres将自动插入一个唯一的值
CREATE TABLE actors (
id_act SERIAL PRIMARY KEY
first_name text NOT NULL,
last_name text NOT NULL
);
如果您有序列,您可以在创建DDL时使用此序列,并且每次插入数据时,
将生成新的id
CREATE TABLE actors (
id_act integer NOT NULL DEFAULT nextval('sequence_name')
first_name text NOT NULL,
last_name text NOT NULL,
CONSTRAINT actors_pkey PRIMARY KEY (id_act)
);
如果有序列,请在insert查询中使用序列
CREATE TABLE actors (
id_act integer,
first_name text NOT NULL,
last_name text NOT NULL,
CONSTRAINT actors_pkey PRIMARY KEY (id_act)
);
INSERT INTO actors (id_act, first_name, last_name) VALUES (nextval('sequence_name'), 'Tom', 'Hanks');
尝试了此操作,但BASE返回错误:Type:com.sun.star.sdbc.SQLException消息:SQL代码提供了结果,但预期没有结果。找到一个类似的示例[link],上一章获取最后一个插入id:*我需要从那里获取storgae其他地方的8,@StOMicha:我不知道BASE,但您可能需要将执行查询的方法更改为允许返回值的方法。
CREATE TABLE actors (
id_act integer,
first_name text NOT NULL,
last_name text NOT NULL,
CONSTRAINT actors_pkey PRIMARY KEY (id_act)
);
INSERT INTO actors (id_act, first_name, last_name) VALUES (nextval('sequence_name'), 'Tom', 'Hanks');