PostgreSql(11版)如何使用IF语句?我只尝试了原始 IF 用法,但遇到了问题(“IF”处或附近的语法错误)。为了解决这个问题,人们建议使用“do &&”,但它不起作用(未终止的美元报价从 SQL DO $$ BEGIN IF 中的位置 3 开始)。这是我的 SQL 代码:
DO $$
BEGIN
IF (NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'categories')) THEN
CREATE TABLE IF NOT EXISTS categories
(
id SERIAL NOT NULL,
name character varying(40),
CONSTRAINT categories_pkey PRIMARY KEY (id)
);
INSERT INTO categories (name) VALUES ('Games');
INSERT INTO categories (name) VALUES ('Multimedia');
INSERT INTO categories (name) VALUES ('Productivity');
INSERT INTO categories (name) VALUES ('Tools');
INSERT INTO categories (name) VALUES ('Health');
INSERT …Run Code Online (Sandbox Code Playgroud) 我正在使用带有 JPA 的 Spring Boot 2,并将它留给 Hibernate 从我的实体创建我的数据库,这工作正常。现在我想添加一个 data.sql 文件,它将为我的数据库提供种子。我配置 JPA 如下:
spring.jpa.properties.hibernate.hbm2ddl.import_files=data.sql
Run Code Online (Sandbox Code Playgroud)
但是,我在执行种子 SQL 时遇到了问题。在文件中我定义了几个函数,最后我正在执行它们:
CREATE OR REPLACE FUNCTION insert_timeout_configuration() RETURNS bigint AS $$
DECLARE created_id bigint;
BEGIN
INSERT INTO timeout_configuration (id, version, timeout)
VALUES (nextval('my_sequence'), 0, 300)
RETURNING id INTO created_id;
return created_id;
END;
$$ language plpgsql;
CREATE OR REPLACE FUNCTION insert_url_configuration() RETURNS bigint AS $$
DECLARE created_id bigint;
BEGIN
INSERT INTO url_configuration (id, version, my_url)
VALUES (nextval('my_sequence'), 0,'http://localhost:8080/')
RETURNING id INTO created_id;
return created_id;
END;
$$ language …Run Code Online (Sandbox Code Playgroud)