gpt4 book ai didi

java - Spring Boot 和 PostgreSQL 中文件 data.sql 中错误的 SQL 语句语法

转载 作者:行者123 更新时间:2023-11-29 12:24:47 25 4
gpt4 key购买 nike

我想创建一个将由 PostgreSQL 数据库创建的条件查询

IF ( NO EXISTS(SELECT * FROM users WHERE username = 'JonkiPro'))
BEGIN
INSERT INTO UserEntity(id, username, email, password, enabled, registration_date, modified_date)
VALUES(1, 'JonkiPro', 'someemail@someemail.com,', 'safsd', true, GetDate(), GetDate())
END

但是在编译过程中出现了错误

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceInitializer': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of class path resource [db/init/data.sql]: IF ( NO EXISTS(SELECT * FROM users WHERE username = 'JonkiPro')); nested exception is org.postgresql.util.PSQLException: BŁĄD: błąd składni w lub blisko "IF"
Pozycja: 1
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:137) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
...

org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1633) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE]
... 99 common frames omitted
Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException: Failed to execute SQL script statement #1 of class path resource [db/init/data.sql]: IF ( NO EXISTS(SELECT * FROM users WHERE username = 'JonkiPro')); nested exception is org.postgresql.util.PSQLException: BŁĄD: błąd składni w lub blisko "IF"
Pozycja: 1
at ...
... 114 common frames omitted
Caused by: org.postgresql.util.PSQLException: ERROR: syntax error in or near "IF".
Pozycja: 1
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2455) ~[postgresql-9.4.1212.jre7.jar:9.4.1212.jre7]
at ...

我不知道他为什么不理解IF命令。但是,当我在 DO $$ ... $$ 之间执行命令时,它会拒绝异常

      Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceInitializer': Invocation of init method failed; nested exception is org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script from resource [class path resource [db/init/data.sql]]; nested exception is java.lang.ArrayIndexOutOfBoundsException
...
... 99 common frames omitted
Caused by: org.springframework.jdbc.datasource.init.UncategorizedScriptException: Failed to execute database script from resource [class path resource [db/init/data.sql]]; nested exception is java.lang.ArrayIndexOutOfBoundsException
...

org.springframework.jdbc.datasource.init.ScriptUtils.executeSqlScript(ScriptUtils.java:470) ~[spring-jdbc-4.3.10.RELEASE.jar:4.3.10.RELEASE]
... 127 common frames omitted

我的第二个问题是如何添加命令以将数据输入 block BEGIN ... END 中的另一个表

最佳答案

参见 this question另一种有条件地创建用户的方法,因为看起来你不能在不首先加载 PL/pgSQL 扩展的情况下使用 IF 语句。在您的情况下,这将导致这样的查询:

INSERT INTO UserEntity(id, username, email, password, enabled, registration_date, modified_date)
SELECT
1, 'JonkiPro', 'someemail@someemail.com,', 'safsd', true, GetDate(), GetDate()
WHERE NOT EXISTS (
SELECT * FROM users WHERE username = 'JonkiPro'
);

关于java - Spring Boot 和 PostgreSQL 中文件 data.sql 中错误的 SQL 语句语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46498072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com