Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于将多条记录插入数据库的Shell脚本_Shell_Unix_Informix - Fatal编程技术网

用于将多条记录插入数据库的Shell脚本

用于将多条记录插入数据库的Shell脚本,shell,unix,informix,Shell,Unix,Informix,我在Informix数据库中有一个表,我希望一次向其中插入多条记录。 其中一列的数据应该是唯一的&其他列数据对于我插入的所有记录可能是相同的 我用于插入一行的典型Insert语句: 插入员工(empid、国家、州)值(1、美国、加州) 现在我想为'empid'列传递不同的值,其余列中的数据可以保持不变 我正在寻找类似于循环empid的东西&提示用户输入empid值的开始和结束范围 当用户将开始值输入为1,将结束值输入为100时,脚本应插入100条empid为1到100的记录。请注意,您需要将开始

我在Informix数据库中有一个表,我希望一次向其中插入多条记录。 其中一列的数据应该是唯一的&其他列数据对于我插入的所有记录可能是相同的

我用于插入一行的典型Insert语句:

插入员工(empid、国家、州)值(1、美国、加州)

现在我想为'empid'列传递不同的值,其余列中的数据可以保持不变

我正在寻找类似于循环empid的东西&提示用户输入empid值的开始和结束范围
当用户将开始值输入为1,将结束值输入为100时,脚本应插入100条empid为1到100的记录。请注意,您需要将开始和结束参数作为输入参数传递给脚本:

#!/bin/sh

start=$1
end=$2

while [[ $start -le $end ]];
do
  echo "insert into employee(empid, country, state) values(${start}, us, ca)"
  start=`expr $start + 1`
done

此解决方案使用存储过程将insert语句包装在循环中。可能更适合于性能至关重要的大量数据:

文件InsertEmployee.sql

drop procedure InsertEmployee;

create procedure InsertEmployee(
        p_start_empid   like employee.empid,
        p_end_empid     like employee.empid,
        p_country       like employee.country,
        p_state         like employee.state
) returning char(255);

        define i integer;

        let i = p_start_empid;

        while i <= p_end_empid
                insert into employee (
                        empid,
                        country,
                        state
                ) values (
                        i,
                        p_country,
                        p_state
                );

                -- logging
                -- if (DBINFO('sqlca.sqlerrd2') > 0) then
                --      return "inserted empid=" || i || " country=" || p_country || " state=" || p_state with resume;
                -- end if

                let i = i + 1;
        end while;
end procedure;
从shell提示符调用存储过程:

echo 'execute procedure InsertEmployee(1,100,"us","ca");' | dbaccess mydatabasename
这将插入3行(我知道您的主键是序列号,这就是为什么在值字段中是0)。在informix中,不能在同一个insert中添加多行,这就是为什么我为每行创建一个insert

Informix:插入表值(0);
mySQL和SQL Server:插入表值(0)、(1)、(2);我尝试了这一点,但在执行脚本时,我在start='expr$start+1'行看到一个错误
echo 'execute procedure InsertEmployee(1,100,"us","ca");' | dbaccess mydatabasename
#!/bin/bash

declare -a namesArray=("name1","name2","name3")

inserts=""

for i in "{arr[@]}"
do
    inserts+="INSERT INTO persons(id, name) VALUES (0,'$i');"
done

echo $inserts | dbaccess yourDataBase