gpt4 book ai didi

sql - 用于运行 SQL 查询并将结果返回给变量的 Bash 脚本

转载 作者:行者123 更新时间:2023-11-29 14:08:06 28 4
gpt4 key购买 nike

我运行这个 bash 脚本是为了连接到 PostgreSQL 数据库,运行一些查询,并简单地检查它是否返回空结果。然后,我想打印出是否返回了任何行。

#!/bin/sh
DATABASE=dbname
USERNAME=user
HOSTNAME=somehost.com
export PGPASSWORD=password

queryResult () {
psql -h $HOSTNAME -U $USERNAME -d $DATABASE <<SQL
SELECT * FROM myTable WHERE valueA > 5.0 OR valueB > 5.0;
IF @@ROWCOUNT > 0 THEN 1 ELSE 0;
SQL
}

valuesFound=$(queryResult)

echo $valuesFound

我遇到了两个问题:

1) 它将第一个查询 (SELECT * FROM myTable...) 的结果存储到 valuesFound 中并打印出来,我不希望这样。我只关心 IF 语句返回 1 还是 0。

2) 第二个查询 (IF @@ROWCOUNT...) 抛出一个语法错误:Syntax error at or near IF

最佳答案

我认为您的脚本可以通过将逻辑移动到一个独特的语句来简化:

queryResult () {
psql -h $HOSTNAME -U $USERNAME -d $DATABASE <<SQL
SELECT CASE WHEN COUNT(*) = 0 THEN 0 ELSE 1 END
FROM myTable
WHERE valueA > 5.0 OR valueB > 5.0;
SQL
}

或者更好的是,使用 EXISTS 来避免潜在的昂贵聚合:

queryResult () {
psql -h $HOSTNAME -U $USERNAME -d $DATABASE <<SQL
SELECT CASE WHEN EXISTS (
SELECT 1 FROM myTable WHERE valueA > 5.0 OR valueB > 5.0
) THEN 1 ELSE 0 END;
SQL
}

关于sql - 用于运行 SQL 查询并将结果返回给变量的 Bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58459058/

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