将 bash 参数中的多个不同内容添加到名为 sql 脚本的变量集

Add multiple and various content from bash parameter to a variable set into the sql script called

我有一个 SQL 脚本和一个 sh 可执行文件 运行 一个脚本在我的数据库上执行一些操作。

我的主要问题是我正在寻找如何做以下事情:

启动脚本时从我的bash参数中发送一个参数数组,我的实际命令是:

./myscript.sh databaseName user thirdParameterToPassAsAString 
'fourthParameterElement1','fourthParameterElement2','fourthParameterElement3'

我的脚本内容:

#!/bin/bash

set -e

psql   <<EOF
    set search_path = search_path;
    set firstParameterusedinSQLScript = ;
    set Param_List = ;
    \i my_script.sql
EOF

和我遇到问题的 sql 部分:

where ae.example in (:Param_List)

我当然对这个 where 子句有一些疑问。

所以问题是我该怎么做?

您是否考虑过在执行 sql 之前更改 sql 本身(不更改包含它的原始 sql 文件)(通过 sed 替换参数)。 如果这是你的选择,你可以定义一个辅助函数,比如

function prepare_script() {
    cat  <<EOF
    set search_path = search_path;
EOF
    sed -e"s|:Param_List||g" -e"s|firstParameterusedinSQLScript||g" Requetes_retour_arriere_fiab_x_siret.sql
}

你可以这样称呼它:

prepare_script "" "" "" | psql  

请注意,您不会更改磁盘本身上的文件,您只需使用 set 读取它并让它在 stdout 上输出更改后的 sql 并将其通过管道传输到 psql.