テーブル毎エクスポートシインポートシェル(CSV)

 

(8.0.31)


vim expcsv.conf
tab1
tab2

vim expcsv.sh

#!/bin/bash

OUTFILE="expcsv_tables.sh"
PASS="'password'"
USER="root"
DB="test"

DIR=$(pwd)

: > "${OUTFILE}"
echo "#!/bin/bash" >> "${OUTFILE}"
for TAB in $(cat expcsv.conf) ; do
  echo "rm -rf ${DIR}/${TAB}.csv" >> "${OUTFILE}"

  echo "MYSQL_PWD=${PASS} mysql -u ${USER} ${DB} <<'EOF' " >> "${OUTFILE}"
  echo "select * into outfile '${DIR}/${TAB}.csv' fields terminated by ',' optionally enclosed by '"'"'"' from ${TAB};"  >> "${OUTFILE}"
  echo "EOF" >> "${OUTFILE}"
done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0

 


vim impcsv.conf
tab1
tab2

vim impcsv.sh

#!/bin/bash

OUTFILE="impcsv_tables.sh"
PASS="'password'"
USER="root"
DB="test"

DIR=$(pwd)

: > "${OUTFILE}"
echo "#!/bin/bash" >> "${OUTFILE}"
for TAB in $(cat impcsv.conf) ; do

  echo "MYSQL_PWD=${PASS} mysql -u ${USER} ${DB} <<'EOF' " >> "${OUTFILE}"
  echo "truncate table ${TAB};"  >> "${OUTFILE}"
  echo "load data infile '${DIR}/${TAB}.csv' into table ${TAB} fields terminated by ',' optionally enclosed by '"'"'"';"  >> "${OUTFILE}"
  echo "EOF" >> "${OUTFILE}"
done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0

 

 

 

(19c)


vim expcsv.conf
TAB1
TAB2


vim expcsv.sh

#!/bin/bash

OUTFILE="expcsv_tables.sh"
CONN="test/test@pdb1"

: > "${OUTFILE}"
echo "#!/bin/bash" >> "${OUTFILE}"
for TAB in $(cat expcsv.conf) ; do

  echo "sqlplus -S ${CONN} <<'EOF' > /dev/null" >> "${OUTFILE}"
  echo "alter session set nls_timestamp_format = 'YYYY/MM/DD HH24:MI:SS.FF9';" >> "${OUTFILE}"
  echo "alter session set nls_date_format = 'YYYY/MM/DD HH24:MI:SS';" >> "${OUTFILE}"
  echo "set head off" >> "${OUTFILE}"
  echo "set trimspool on" >> "${OUTFILE}"
  echo "set echo off" >> "${OUTFILE}"
  echo "set feed off" >> "${OUTFILE}"
  echo "set long 2000000000" >> "${OUTFILE}"
  echo "set longchunksize  2000000000" >> "${OUTFILE}"
  echo "set linesize 32767" >> "${OUTFILE}"
  echo "set pagesize 0" >> "${OUTFILE}"
  echo "set markup csv on" >> "${OUTFILE}"
  echo "spool ${TAB}.csv" >> "${OUTFILE}"
  echo "select * from ${TAB};" >> "${OUTFILE}"
  echo "spool off" >> "${OUTFILE}"
  echo "EOF" >> "${OUTFILE}"

done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0


-- 制御ファイル作成用プロシージャ

set serveroutput on
create or replace procedure proc_make_ctl(p_tabname in varchar2)
authid current_user
as

cursor cur1 is select table_name,column_name,data_type,data_length,column_id
               from user_tab_columns
               where table_name = p_tabname
               order by column_id;
wk1 number;
va1 varchar2(4000);

begin

dbms_output.put_line('LOAD DATA');
dbms_output.put_line('INFILE '''||p_tabname||'.csv'' "str ''\n''"');
dbms_output.put_line('truncate');
dbms_output.put_line('INTO TABLE '||p_tabname);
dbms_output.put_line('FIELDS TERMINATED BY '',''');
dbms_output.put_line('OPTIONALLY ENCLOSED BY ''"'' AND ''"''');
dbms_output.put_line('TRAILING NULLCOLS ( ');

select count(*) into wk1 from  user_tab_columns where table_name = p_tabname;

for c1 in cur1 loop

  if c1.column_id = wk1 then
    va1 := ' ) ';
  else
    va1 := ' , ';
  end if;

  if c1.data_type in ('CHAR','VARCHAR2') then
    dbms_output.put_line(c1.column_name ||' CHAR ('|| c1.data_length || ') ' ||  va1);
  elsif c1.data_type in ('DATE') then
    dbms_output.put_line(c1.column_name ||' DATE "YYYY/MM/DD HH24:MI:SS" ' ||  va1);
  elsif c1.data_type like 'TIMESTAMP%' then
    dbms_output.put_line(c1.column_name ||' TIMESTAMP "YYYY/MM/DD HH24:MI:SS.FF9" ' ||  va1);
  else 
    dbms_output.put_line(c1.column_name || va1);
  end if;

end loop;
end;
/
sho error

 

vim impcsv.conf
TAB1
TAB2


vim impcsv.sh

#!/bin/bash

OUTFILE="impcsv_tables.sh"
CONN="test/test@pdb1"


: > "${OUTFILE}"
echo "#!/bin/bash" >> "${OUTFILE}"
for TAB in $(cat impcsv.conf) ; do

  echo "sqlplus -S ${CONN} <<'EOF' > /dev/null" >> "${OUTFILE}"
  echo "set head off" >> "${OUTFILE}"
  echo "set trimspool on" >> "${OUTFILE}"
  echo "set echo off" >> "${OUTFILE}"
  echo "set feed off" >> "${OUTFILE}"
  echo "set long 2000000000" >> "${OUTFILE}"
  echo "set longchunksize  2000000000" >> "${OUTFILE}"
  echo "set linesize 32767" >> "${OUTFILE}"
  echo "set pagesize 0" >> "${OUTFILE}"
  echo "set serveroutput on" >> "${OUTFILE}"
  echo "spool ${TAB}.ctl" >> "${OUTFILE}"
  echo "exec proc_make_ctl('${TAB}');" >> "${OUTFILE}"
  echo "spool off" >> "${OUTFILE}"
  echo "EOF" >> "${OUTFILE}"

  echo "sqlldr ${CONN} control=${TAB}.ctl log=${TAB}.log" >> "${OUTFILE}"

done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0

 

 

(15)


vim expcsv.conf
tab1
tab2

vim expcsv.sh

#!/bin/bash

OUTFILE="expcsv_tables.sh"
DB="test"

DIR=$(pwd)

: > "${OUTFILE}"
echo "#!/bin/bash" >> "${OUTFILE}"
for TAB in $(cat expcsv.conf) ; do
  echo "psql ${DB} <<'EOF'" >> "${OUTFILE}"
  echo "\copy ${TAB} to '${DIR}/${TAB}.csv' with ( format csv,  null '', quote '"'"'"' );" >> "${OUTFILE}"
  echo "EOF" >> "${OUTFILE}"
done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0

 

vim impcsv.conf
tab1
tab2

vim impcsv.sh

#!/bin/bash

OUTFILE="impcsv_tables.sh"
DB="test"

DIR=$(pwd)


: > "${OUTFILE}"
echo "#!/bin/bash" >> "${OUTFILE}"
for TAB in $(cat impcsv.conf) ; do
  echo "psql ${DB} <<'EOF'" >> "${OUTFILE}"
  echo "truncate table ${TAB};" >> "${OUTFILE}"
  echo "\copy ${TAB} from '${DIR}/${TAB}.csv' with ( format csv,  null '', quote '"'"'"' );" >> "${OUTFILE}"
  echo "EOF" >> "${OUTFILE}"
done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0

 

 

 

(2019)
OS: CentOS7


vim expcsv.conf
tab1
tab2

vim expcsv.sh

#!/bin/bash

OUTFILE="expcsv_tables.sh"
HOST="localhost"
DB="test"
USER="sa"
PASS="'password'"

: > "${OUTFILE}"
for TAB in $(cat expcsv.conf) ; do
  echo "bcp dbo.${TAB} out ${TAB}.csv -S ${HOST} -d ${DB} -U ${USER} -P${PASS} -c -t," >> "${OUTFILE}"
done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0


vim impcsv.conf
tab1
tab2

vim impcsv.sh

#!/bin/bash

OUTFILE="impcsv_tables.sh"
HOST="localhost"
DB="test"
USER="sa"
PASS="'password'"

: > "${OUTFILE}"
for TAB in $(cat impcsv.conf) ; do
  echo "sqlcmd -S ${HOST} -d ${DB} -U ${USER} -P${PASS} -Q "'"'"truncate table ${TAB}"'"' >> "${OUTFILE}"
  echo "bcp dbo.${TAB} in ${TAB}.csv -S ${HOST} -d ${DB} -U ${USER} -P${PASS} -c -t," >> "${OUTFILE}"
done

chmod +x "${OUTFILE}"
./"${OUTFILE}"

exit 0