sqlplus执行sql脚本(sql server自动生成批量执行SQL脚本的批处理)

本文目录
- sql server自动生成批量执行SQL脚本的批处理
- sqlplus执行脚本文件时如何传参数
- 如何在sqlplus中运行创建触发器的脚本
- PL/SQL中如何让程序每隔几秒插入一条数据
- SQL*Plus中怎么执行多个*sql脚本文件
- sqlplus执行sql脚本如何退出sqlplus环境
- sqlplus创建存储过程脚本不生效
sql server自动生成批量执行SQL脚本的批处理
场景:
DBA那边给我导出了所有的存储 函数等等对象的创建脚本 有上千个文件
现在需要将这些对象创建脚本导入到另外一个库 如何解决呢?
手动一个个执行显然不太现实
于是手动写了一个批处理 将所有的文件形成一个 SQL的脚本 最后以@生成的 SQL脚本方式导入到目标库中
OS环境:WINDOWS xp
脚本内容如下:
@echo off if exist list sql del list sql /q :input cls set input=: set /p input= 请输入要进行判断的路径 set "input=%input:"=%" :: 上面这句为判断%input%中是否存在引号 有则剔除 if "%input%"==":" goto input if not exist "%input%" goto input for /f "delims=" %%i in ( dir /b /a d /s "%input%" ) do echo @@%%~fnxi》》list sql if not exist list sql goto no_file start list sql exit :no_file cls echo %cur_dir% 出现错误 未成功生成list sql脚本! pause
使用:
另存为 BAT类型文件后 双击执行
输入你脚本的路径:
如我的E盘CRY文件夹下 有如下类型的文件:
TEST PRC
TEST FNC(有子文件夹 )
TEST VW
执行该批处理后 最后生成的list sql脚本文件内容如下(执行完批处理后会用默认的器自动打开该文件):
@@E:cryTEST PRC
@@E:cry TEST FNC
@@E:cryTEST VW
打开SQLPLUS 以指定用户登录数据库 然后执行: (我的脚本文件生成在d盘)
@D:list sql
这样所有的对象就会自动在指定用户下生成
lishixinzhi/Article/program/SQLServer/201311/22286sqlplus执行脚本文件时如何传参数
d:\test.sql脚本如下: select 1 from 2; exit; 执行时这样传参数:sqlplus scott/tiger@test @d:\test.sql sysdate du
sqlplus 执行脚本文件时如何传参数
来源:Linux社区
作者:yfleng2002
d:\test.sql脚本如下:
exit;
执行时这样传参数:sqlplus "scott/tiger@test" @d:\test.sql sysdate dual
注意:参数必须用&表示,不然传不进去,会提示让手动输入参数
如果脚本中有重复用到相同的值,如果&1=&2:
d:\tes2.sql
执行时,就必须传2个参数:
小窍门: 这时用procedure就可以不用传多个相同的参数,则只用传1个参数:
d:\test3.sql
sqlplus "scott/tiger@test" @d:\test3.sql 10
,
如何在sqlplus中运行创建触发器的脚本
脚本好以后放到一个目录下,脚本名比如create.sql,最好是英文目录,比如c盘的data目录。
其中创建的脚本必须不能有错误,否则编译肯定无法通过,然后要以分号结尾。
然后cmd进入data目录,登录sqlplus到指定数据库。
执行
@create.sql
PL/SQL中如何让程序每隔几秒插入一条数据
在编写ORACLE PL/SQL中,如果需要程序执行中暂停几秒钟再继续执行,可以通过oracle内置的dbms_lock.sleep来实现,不过dbms_lock包需要用户自己安装。 $ sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.
在编写ORACLE PL/SQL中,如果需要程序执行中暂停几秒钟再继续执行,可以通过oracle内置的dbms_lock.sleep来实现,不过dbms_lock包需要用户自己安装。
# su - oracle
$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Mon May 25 16:36:12 2015
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL》 startup
SQL》 @?/rdbms/admin/dbmslock.sql
Package created.
Synonym created.
Grant succeeded.
SQL》 grant execute on dbms_lock to public;--授权PUBLIC执行权限
Grant succeeded.
SQL》 create table test1(id number,name varchar2(40),time date); --创建test1临时表
Table created.
SQL》 select * from test1; --无数据
no rows selected
SQL》 SET TIMING ON --打开时间显示
SQL》 begin --开始执行测试脚本
2 insert into test1(id,name,time) values(1,’Andy’,sysdate);
3 DBMS_LOCK.SLEEP(10); --让程序暂时10秒钟
4 insert into test1(id,name,time) values(2,’Shirley’,sysdate);
5 commit;
6 end;
7 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:10.04 --程序执行时间为10.04秒
SQL》 SELECT ID,NAME,TO_CHAR(TIME,’YYYY/MM/DD HH24:MI:SS’) AS TIME FROM TEST1;
--查询执行结果
ID NAME TIME
---------- ------------------------- -----------------
1 Andy 2014/12/10 10:09:03 --第一条的插入时间是09:03
2 Shirley 2014/12/10 10:09:13 --第二条的插入时间是09:13
刚好比第一条晚了10秒钟
SQL》 drop table test1;
Table dropped.
下面给个例子:
每隔一秒插入一条数据
vi /tmp/11.sh
#/bin/sh
su - oracle
sqlplus / as sysdba
drop table test;
drop sequence test_seq;
create table test (id int,hostname varchar2(50),datetime date);
create sequence test_seq
minvalue 1
maxvalue 100000
start with 1
increment by 1
cache 20;
declare
maxrecords constant int:=100000;
i int :=1;
begin
for i in 1..maxrecords loop
insert into test
(id,hostname,datetime)
values
(test_seq.nextval,’oraclevm’,sysdate);
commit;
dbms_lock.sleep(1);
end loop;
end;
/
exit;
EOF
#chmod 755 /tmp/11.sh
#cd /tmp
#./11.sh
即可执行。
先设置一下时间格式
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
最后进行数据查询
spool /tmp/test_oracle
set linesize 80
col hostname format a8;
set colsep’ ’;
set pagesize 0;
SQL》 select id,hostname,to_char(datetime,’YYYY-MM-DD HH24:MI:SS’) from test;
1 oraclevm 2014-12-27 10:19:09
2 oraclevm 2014-12-27 10:19:10
3 oraclevm 2014-12-27 10:19:11
4 oraclevm 2014-12-27 10:19:12
5 oraclevm 2014-12-27 10:19:13
6 oraclevm 2014-12-27 10:19:14
7 oraclevm 2014-12-27 10:19:15
8 oraclevm 2014-12-27 10:19:16
9 oraclevm 2014-12-27 10:19:17
10 oraclevm 2014-12-27 10:19:18
spool用法:
spool是Oracle SQL*PLUS下的命令,可以用它来导出表中的大量数据,生成格式可以由自己手动控制。
1. 编写spool.sql脚本,存放在/tmp目录下
set trimspool on set linesize 120 set pagesize 2000 set newpage 1 set heading off set term off set echo offset feedback offspool /tmp/data.txt select deptno || ’,’ || dname || ’,’ || loc from dept;spool off
2. 在sql*plus上用scott用户登录,执行上面的sql脚本
!/tmp/spool.sql(linux下)
@d:\spool.sql(windows下)
3.观察相应目录,生成了data.txt文件,txt中的内容如下:
10,ACCOUNTING,NEW YORK20,RESEARCH,DALLAS30,SALES,CHICAGO40,OPERATIONS,BOSTON
总结:
利用spool可以方便地导出所需要的表,进而可以利用导出的数据进行不同数据库间的数据迁移。
下面介绍使用spool的一些常用设置:
set colsep ’ ’; //域输出分隔符 set echo off;//显示start启动的脚本中的每个sql命令,缺省为on set feedback off;//回显本次sql命令处理的记录条数,缺省为on set heading off; //输出域标题,缺省为on set pagesize 0;//输出每页行数,缺省为24,为了避免分页,可设定为0。 set termout off; //显示脚本中的命令的执行结果,缺省为on(可以缩写为term)set trimout on;//去除标准输出每行的拖尾空格,缺省为off set trimspool on;//去除重定向(spool)输出每行的拖尾空格,缺省为off
注意:
如果直接在sql*plus中执行上面的spool.sql命令,而不通过执行脚本来进行,那么在生成的txt文件中会存在执行的sql语句。
SQL*Plus中怎么执行多个*sql脚本文件
1.在
SQL*Plus
中执行单个sql
脚本文件
:
SQL》@c:\aaa.sql
2.在SQL*Plus中执行多个sql脚本文件:
比如你要执行得2个sql脚本
a.sql
和
b.sql
现在你重新写一个脚本
c.sql
其中得内容如下
@@a.sql
@@b.sql
然后把c.sql放在a.sql和
b.sql
得同一个目录中即可,然后在sqlplus下执行:SQL》@c.sql
就可以了.
当然有具体路径的加上路径即可,如下:
SQL》
@E:\c.sql注意事项:
1》.sql文件都在一个目录中;2》.尤其是c.sql文件中直接写:
@@a.sql
@@b.sql
即可。
sqlplus执行sql脚本如何退出sqlplus环境
C:\Users\fengjun》sqlplus dexter/xiaojd@startrek @1.sql
SQL*Plus: Release 11.2.0.3.0 Production on 星期五 2月 7 14:32:04 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
请输入用户名: ^C
C:\Users\fengjun》sqlplus -L dexter/xiaojd@startrek @1.sql
SQL*Plus: Release 11.2.0.3.0 Production on 星期五 2月 7 14:32:12 2014
Copyright (c) 1982, 2011, Oracle. All rights reserved.
ERROR:
ORA-01017: 用户名/口令无效; 登录被拒绝
SP2-0751: 无法连接 Oracle。正在退出 SQL*Plus
加个-L 参数就行,详细解释:
-L 只尝试登录一次, 而不是在出错时再次提示。
sqlplus创建存储过程脚本不生效
创建过程中有语法错误。
在存储体中每条SQL语句都是以分号结尾的,而在SQL控制台中在执行脚本时,一遇到分号就会执行SQL语句,这样的话若是该条语句并不是正确的执行语句的话,那么就会报错。

更多文章:
java外包用的比较多技术(java后端程序员最常用的技术有哪些,重点技术有哪些)
2026年5月22日 18:30
clip converter(用ClipConverter下载的youku视频在电脑哪个文件夹)
2026年8月24日 21:15
chmod修改权限(ubuntu linux下使用 chmod 修改文件权限,命令后提示【缺少操作数】,求解决方法)
2025年8月3日 09:30
neighborhood在哪买(香港潮牌店铺推荐去香港买什么好)
2026年6月6日 23:00
richtextbox用法(怎样使用C#的RichTextBox控件)
2026年2月13日 20:45
js replace 正则表达式(求一个js正则表达式:替换html内容中除了标签外的特定字符为另外一个字符.)
2025年9月5日 03:00
rock什么意思中文意思(rock是什么意思 rock的中文翻译、读音、例句)
2026年9月6日 10:30
衣香丽影同档次的品牌(太平鸟,伊芙丽,衣香丽影,红袖三彩哪家好)
2026年8月15日 07:15
excel怎么用round保留一位小数(excel如何保留一位小数)
2025年12月21日 16:45
c语言数组元素求和(c语言求数组元素的总和!求助各位大佬!)
2025年9月7日 00:30













