写一个shell脚本执行sql语句

时间:2021-05-21 14:53:14
写一个shell脚本执行insert into tt(id,name) select id,name from yy语句
test.sh

#!/bin/bash
sqlplus -s 'cisf/cisf23@cisfkfdb'<<EOF
set feed off
set heading off;
set feedback off;
set verify off;
insert into tt(id,name) select id,name from yy;
EOF

没写过shell脚本,大家帮我看看!

11 个解决方案

#1


没什么大问题,就是在 EOF 之前,加一个 commit; 

#2


引用 1 楼 opps_zhou 的回复:
没什么大问题,就是在 EOF 之前,加一个 commit;
Up,学习下

#3


引用 1 楼 opps_zhou 的回复:
没什么大问题,就是在 EOF 之前,加一个 commit;

test.sh

#!/bin/bash
sqlplus -s 'cisf/cisf23@cisfkfdb'<<EOF
set feed off
set heading off;
set feedback off;
set verify off;
insert into T_LX_TRANS_DATE_AFIER_CLOSED(tx5_sequence.nextval,MARKET_CD,SEC_CODE, OPENED_PRICE, HIGHEST_PRICE,LOWEST_PRICE,CLOSED_PRICE,MATCH_QTY,MATCH_QMT) select MARKET,SEC_CODE,OPEN_PRICE,HIGH_PRICE,LOW_PRICE,CLOSE_PRICE,MATCH_QTY,MATCH_AMT from T_SEC_MKT_DATA;
commit;
exit;
EOF

部署到服务器上 执行时报错了:
xmkf_B54_/home/cisf/cisfkf/lx $
xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
sh: ./test.sh: Execute permission denied.
这是什么意思?

#4


chmod +x test.sh
你没有给 test.sh 可执行权限

或者 sh test.sh

#5


引用 4 楼 opps_zhou 的回复:
chmod +x test.sh
你没有给 test.sh 可执行权限

或者 sh test.sh

恩 赋权限了

xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
interpreter "/bin/bash" not found
file link resolves to "/usr/bin/bash"
sh: ./test.sh:  not found.
xmkf_B54_/home/cisf/cisfkf/lx $ls 
conf                 conf.properties.bak  lib                  run.sh               test.sh
conf.properties      jms.txt              nohup.out            startJMS.sh
xmkf_B54_/home/cisf/cisfkf/lx $
xmkf_B54_/home/cisf/cisfkf/lx $
文件没找到?
怎么解决?第一次用脚本 不会啊

#6


/bin/ls -l /proc/$$/exe 
看一下你当前用户是 csh 还是 bash

#7


引用 6 楼 opps_zhou 的回复:
/bin/ls -l /proc/$$/exe 
看一下你当前用户是 csh 还是 bash

恩 这个已经解决好了,但遇到一个很奇怪的问题:
xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
insert into T_LX_TRANS_DATE_AFIER_CLOSED(tx5_sequence.nextval,MARKET_CD,SEC_CODE, OPENED_PRICE, HIGHEST_PRICE,LOWEST_PRICE,CLOSED_PRICE,MATCH_QTY,MATCH_QMT) select MARKET,SEC_CODE,OPEN_PRICE,HIGH_PRICE,LOW_PRICE,CLOSE_PRICE,MATCH_QTY,MATCH_AMT from T_SEC_MKT_DATA
            *
ERROR at line 1:
ORA-00942: table or view does not exist
表一定存在,这是怎么回事,是不是没权限操作T_SEC_MKT_DATA这个表?

#8


引用 7 楼 wgh770513146 的回复:
引用 6 楼 opps_zhou 的回复:
/bin/ls -l /proc/$$/exe
看一下你当前用户是 csh 还是 bash

恩 这个已经解决好了,但遇到一个很奇怪的问题:
xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
insert into T_LX_TRANS_DATE_AFIER_CLOSED(tx5_sequence.nextv……

grant下

#9


请楼主检查
用户名和密码cisf/cisf23登陆数据库后,是否可以查询下面两张表:
 T_LX_TRANS_DATE_AFIER_CLOSED
 T_SEC_MKT_DATA

1、很有可能这两张表不是在cisf用户下面。

#10


select owner, table_name from dba_all_tables 
 where table_name = 'T_LX_TRANS_DATE_AFIER_CLOSED'
    or table_name = 'T_SEC_MKT_DATA';

看下这两张表的 owner 是谁
然后用表所属用户登陆数据库

grant insert on T_LX_TRANS_DATE_AFIER_CLOSED to cisf;
grant select on T_SEC_MKT_DATA to cisf;

#11


引用 10 楼 opps_zhou 的回复:
select owner, table_name from dba_all_tables 
 where table_name = 'T_LX_TRANS_DATE_AFIER_CLOSED'
  or table_name = 'T_SEC_MKT_DATA';

看下这两张表的 owner 是谁
然后用表所属用户登陆数据库

grant insert on T_LX_TRANS_……
+1

#1


没什么大问题,就是在 EOF 之前,加一个 commit; 

#2


引用 1 楼 opps_zhou 的回复:
没什么大问题,就是在 EOF 之前,加一个 commit;
Up,学习下

#3


引用 1 楼 opps_zhou 的回复:
没什么大问题,就是在 EOF 之前,加一个 commit;

test.sh

#!/bin/bash
sqlplus -s 'cisf/cisf23@cisfkfdb'<<EOF
set feed off
set heading off;
set feedback off;
set verify off;
insert into T_LX_TRANS_DATE_AFIER_CLOSED(tx5_sequence.nextval,MARKET_CD,SEC_CODE, OPENED_PRICE, HIGHEST_PRICE,LOWEST_PRICE,CLOSED_PRICE,MATCH_QTY,MATCH_QMT) select MARKET,SEC_CODE,OPEN_PRICE,HIGH_PRICE,LOW_PRICE,CLOSE_PRICE,MATCH_QTY,MATCH_AMT from T_SEC_MKT_DATA;
commit;
exit;
EOF

部署到服务器上 执行时报错了:
xmkf_B54_/home/cisf/cisfkf/lx $
xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
sh: ./test.sh: Execute permission denied.
这是什么意思?

#4


chmod +x test.sh
你没有给 test.sh 可执行权限

或者 sh test.sh

#5


引用 4 楼 opps_zhou 的回复:
chmod +x test.sh
你没有给 test.sh 可执行权限

或者 sh test.sh

恩 赋权限了

xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
interpreter "/bin/bash" not found
file link resolves to "/usr/bin/bash"
sh: ./test.sh:  not found.
xmkf_B54_/home/cisf/cisfkf/lx $ls 
conf                 conf.properties.bak  lib                  run.sh               test.sh
conf.properties      jms.txt              nohup.out            startJMS.sh
xmkf_B54_/home/cisf/cisfkf/lx $
xmkf_B54_/home/cisf/cisfkf/lx $
文件没找到?
怎么解决?第一次用脚本 不会啊

#6


/bin/ls -l /proc/$$/exe 
看一下你当前用户是 csh 还是 bash

#7


引用 6 楼 opps_zhou 的回复:
/bin/ls -l /proc/$$/exe 
看一下你当前用户是 csh 还是 bash

恩 这个已经解决好了,但遇到一个很奇怪的问题:
xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
insert into T_LX_TRANS_DATE_AFIER_CLOSED(tx5_sequence.nextval,MARKET_CD,SEC_CODE, OPENED_PRICE, HIGHEST_PRICE,LOWEST_PRICE,CLOSED_PRICE,MATCH_QTY,MATCH_QMT) select MARKET,SEC_CODE,OPEN_PRICE,HIGH_PRICE,LOW_PRICE,CLOSE_PRICE,MATCH_QTY,MATCH_AMT from T_SEC_MKT_DATA
            *
ERROR at line 1:
ORA-00942: table or view does not exist
表一定存在,这是怎么回事,是不是没权限操作T_SEC_MKT_DATA这个表?

#8


引用 7 楼 wgh770513146 的回复:
引用 6 楼 opps_zhou 的回复:
/bin/ls -l /proc/$$/exe
看一下你当前用户是 csh 还是 bash

恩 这个已经解决好了,但遇到一个很奇怪的问题:
xmkf_B54_/home/cisf/cisfkf/lx $./test.sh
insert into T_LX_TRANS_DATE_AFIER_CLOSED(tx5_sequence.nextv……

grant下

#9


请楼主检查
用户名和密码cisf/cisf23登陆数据库后,是否可以查询下面两张表:
 T_LX_TRANS_DATE_AFIER_CLOSED
 T_SEC_MKT_DATA

1、很有可能这两张表不是在cisf用户下面。

#10


select owner, table_name from dba_all_tables 
 where table_name = 'T_LX_TRANS_DATE_AFIER_CLOSED'
    or table_name = 'T_SEC_MKT_DATA';

看下这两张表的 owner 是谁
然后用表所属用户登陆数据库

grant insert on T_LX_TRANS_DATE_AFIER_CLOSED to cisf;
grant select on T_SEC_MKT_DATA to cisf;

#11


引用 10 楼 opps_zhou 的回复:
select owner, table_name from dba_all_tables 
 where table_name = 'T_LX_TRANS_DATE_AFIER_CLOSED'
  or table_name = 'T_SEC_MKT_DATA';

看下这两张表的 owner 是谁
然后用表所属用户登陆数据库

grant insert on T_LX_TRANS_……
+1