2013-07-11 131 views
0

我在Informix DB中有一張表,我想一次插入多條記錄。 數據的列的一個應該是唯一的&其他列數據可能對所有我插入記錄相同用於將多個記錄插入數據庫的Shell腳本

典型插入語句我用它來插入一行:

INSERT INTO員工(EMPID,國家,狀態)值(1,us,ca)

現在我想爲'empid'列傳遞不同的值,&其餘列中的數據可以保持不變。

我在尋找類似的循環EMPID &提示用戶在用戶進入起始值爲1個&結束值100,腳本應該EMPID的1插頁100個記錄輸入EMPID 值的開始&結束範圍100

回答

0

請注意,你需要開始和結束參數作爲輸入參數傳遞給你的腳本:

#!/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 
+0

我試過這個,但在執行腳本時,我在行start ='expr $ start + 1'處看到一個錯誤, – user2573747

0

該解決方案使用一個存儲過程來包裝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; 

負載存儲過程到數據庫:

dbaccess mydatabasename InsertEmployee.sql 

呼叫從外殼存儲過程提示:

echo 'execute procedure InsertEmployee(1,100,"us","ca");' | dbaccess mydatabasename 
0
#!/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 

這將插入3行(我假設你的主鍵是序列號,這就是爲什麼在值字段爲0)。在informix中,你不能在同一個插入中添加多行,這就是爲什麼我爲每行創建一個插入。 Informix:INSERT INTO表VALUES(0);其中, SQL Server:INSERT INTO表VALUES(0),(1),(2); < - 3行

相關問題