Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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
Oracle 从批处理文件执行SQL_Oracle_Batch File_Sqlplus - Fatal编程技术网

Oracle 从批处理文件执行SQL

Oracle 从批处理文件执行SQL,oracle,batch-file,sqlplus,Oracle,Batch File,Sqlplus,我不熟悉批处理文件脚本 我只想创建一个批处理文件,调用SQL文件并将结果存储在文本文件中 谁能帮帮我,非常感谢你的帮助 这是我第一次需要创建此类文件。使用批处理文件: sqlcmd -S sqlservername -i yoursqlfile.sql -U username -P password -o outputfile.txt 保存并运行以下命令: @echo off sqlplus -s -l user/pass@yourdb @yoursql.sql>your_log.log

我不熟悉批处理文件脚本

我只想创建一个批处理文件,调用SQL文件并将结果存储在文本文件中

谁能帮帮我,非常感谢你的帮助

这是我第一次需要创建此类文件。

使用批处理文件:

sqlcmd -S sqlservername -i yoursqlfile.sql -U username -P password -o outputfile.txt
保存并运行以下命令:

@echo off
sqlplus -s -l user/pass@yourdb @yoursql.sql>your_log.log

p、 确保sql脚本的最后一行是
exit或批处理文件将挂起。

我创建了一个更高级的启动器,请试用它(您可以在上找到最新版本)

下面是代码:

launcher.cmd

@ECHO OFF

rem Script Launcher by Fr3dY v1.4
rem ##############################
rem Version History:
rem 1.4 - Misc. fixes
rem 1.3 - Merged with 'server launcher', now accepts both SQL and SHELL SCRIPTS
rem 1.2 - Interactive prompt to show the file on screen
rem 1.1 - No need to add 'quit;' or 'exit;' in the .sql file anymore
rem       Fixed sqlplus waiting for username/password if the first attempt was unsuccessful
rem       Log file is generated automatically, including date and time in name
rem       Misc. fixes
rem 1.0 - Initial Version

:MAIN
::Path of PLINK
set PLINK="C:\Program Files (x86)\PuTTY\plink.exe"
::List with TNS NAMES
set dbservers=launcher-databases.txt
::List with LINUX SERVERS
set linuxservers=launcher-servers.txt

set dt=%DATE:~6,4%_%DATE:~3,2%_%DATE:~0,2%__%TIME:~0,2%_%TIME:~3,2%_%TIME:~6,2%
set dt=%dt: =0%

echo Choose launcher mode:
echo 1) Database scripts (.sql files)
echo 2) Shell scripts (.sh files)
set /p launchermode="Insert value: "
echo.

if %launchermode%==1 (
  set extension=sql
  set servers=%dbservers%
  set mode=DB
) else (
    if %launchermode%==2 (
      set extension=sh
      set servers=%linuxservers%
      set mode=OS
    ) else (echo "Incorrect value, exiting..." & goto :END)
)    

if exist %servers% (
  goto :LISTFILES
) else echo FILE %servers% NOT FOUND, ABORTING & goto :END


:LISTFILES
echo Listing *.%extension% files...
echo.
dir /b *.%extension%
echo.

set /p file=Name of the file to be launched (without extension)? 

if exist %file%.%extension% (
  goto :CONFIRMSHOW
) else echo FILE %file%.%extension% NOT FOUND, ABORTING & goto :END


:CONFIRMSHOW
echo.
set /p confirm=Show the script %file%.%extension% on screen now? 
if %confirm%==y (
  goto :SHOWSCRIPT
  ) else goto :CONFIRMEXEC
echo.

:SHOWSCRIPT
echo.
echo Content of %file%.%extension%
echo ######################
type %file%.%extension%
echo.
echo ######################
echo.

:CONFIRMEXEC
set /p confirm=Are you sure you want to execute this script? 
if %confirm%==y (
  set /p user=%mode% username?  
  goto :HInput
  ) else echo ABORTED & goto :END
echo.
echo Output saved to %file%_%dt%.log
echo.
Goto :END

:HInput
::Hidden.cmd
::Tom Lavedas, 02/05/2013, 02/20/2013
::Carlos, 02/22/2013
::https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/f7mb_f99lYI
::Version 3.0     
SetLocal DisableDelayedExpansion
echo.
Echo Enter password:
Set "Line="
Rem Save 0x08 character in BS variable
For /F %%# In (
'"Prompt;$H&For %%# in (1) Do Rem"'
) Do Set "BS=%%#"

:HILoop
Set "Key="
For /F "delims=" %%# In (
'Xcopy /L /W "%~f0" "%~f0" 2^>Nul'
) Do If Not Defined Key Set "Key=%%#"
Set "Key=%Key:~-1%"
SetLocal EnableDelayedExpansion
If Not Defined Key echo. & Goto :HIEnd
If %BS%==^%Key% (Set /P "=%BS% %BS%" <Nul
Set "Key="
If Defined Line Set "Line=!Line:~0,-1!"
) Else Set /P "=*" <Nul
If Not Defined Line (EndLocal &Set "Line=%Key%"
) Else For /F delims^=^ eol^= %%# In (
"!Line!") Do EndLocal &Set "Line=%%#%Key%"
Goto :HILoop

:HIEnd
if %launchermode%==1 (
  goto :EXECDB
) else goto :EXECLINUX

:EXECDB
FOR /f %%A IN (%servers%) DO CALL ECHO DATABASE: %%A & ECHO DATABASE: %%A >> %file%_%dt%.log & sqlplus -S -L %user%/!Line!@%%A < %file%.%extension% >> %file%_%dt%.log
goto :END

:EXECLINUX
FOR /f %%A IN (%servers%) DO CALL ECHO SERVER: %%A & ECHO SERVER: %%A >> %file%_%dt%.log & echo y | %PLINK% %user%@%%A -pw !Line! "exit" & %PLINK% %user%@%%A -pw !Line! -batch -m %file%.%extension% >> %file%_%dt%.log & echo. >> %file%_%dt%.log
goto :END

:END
pause
@ECHO关闭
Fr3dY v1.4版的rem脚本启动器
雷姆##############################
rem版本历史记录:
rem 1.4-杂项。修复
rem 1.3-与“服务器启动器”合并,现在接受SQL和SHELL脚本
rem 1.2-在屏幕上显示文件的交互式提示
rem 1.1-无需添加“退出;”或“退出;”在.sql文件中
rem修复了sqlplus在第一次尝试失败时等待用户名/密码的问题
rem日志文件自动生成,包括名称中的日期和时间
雷姆杂项。修复
rem 1.0-初始版本
:MAIN
::普林克之路
set PLINK=“C:\Program Files(x86)\PuTTY\PLINK.exe”
::列出TNS名称
设置dbservers=launcher-databases.txt
::列出LINUX服务器
设置linuxservers=launcher-servers.txt
set dt=%DATE:~6,4%\u%日期:~3,2%\u%日期:~0,2%\u%时间:~0,2%\u%时间:~3,2%\u%时间:~6,2%
设置dt=%dt:=0%
echo选择启动器模式:
echo 1)数据库脚本(.sql文件)
echo 2)Shell脚本(.sh文件)
set/p launchermode=“插入值:”
回声。
如果%launchermode%==1(
set extension=sql
设置服务器=%dbservers%
设置模式=DB
)否则(
如果%launchermode%==2(
设置扩展名=sh
设置服务器=%linuxservers%
设置模式=操作系统
)否则(回显“值不正确,正在退出…”转到:结束)
)    
如果存在%servers%(
转到:列表文件
)未找到else回显文件%servers%,正在中止(&goto):结束
:列表文件
回显列表*%扩展名%文件。。。
回声。
目录/b*%扩展%
回声。
set/p file=要启动的文件名(不带扩展名)?
如果存在%file%。%extension%(
后藤:确认秀
)else回显文件%FILE%。%未找到扩展名%,正在中止(&goto):结束
:CONFIRMSHOW
回声。
set/p confirm=现在在屏幕上显示脚本%file%。%extension%?
如果%confirm%==y(
后藤:SHOWSCRIPT
)其他转到:CONFIRMEXEC
回声。
:SHOWSCRIPT
回声。
回显%file%的内容。%extension%
回音######################
类型%file%。%extension%
回声。
回音######################
回声。
:CONFIRMEXEC
set/p confirm=确定要执行此脚本吗?
如果%confirm%==y(
设置/p用户=%mode%用户名?
后藤:辛普特
)else echo中止&转到:结束
回声。
回显输出保存到%file%\uUdt%.log
回声。
后藤:结束
:HInput
::Hidden.cmd
::汤姆·拉维达斯,2013年5月2日,2013年2月20日
::卡洛斯,2013年2月22日
::https://groups.google.com/forum/#!topic/alt.msdos.batch.nt/f7mb_f99lYI
::版本3.0
SetLocal DisableDelayedExpansion
回声。
输入密码:
设置“行=”
Rem在BS变量中保存0x08字符
对于/F%%#In(
“((1)Do Rem中的%%#提示:$H&For%””
)设置“BS=%%#”
:HILoop
设置“键=”
对于/F“delims=“%%#In(
“Xcopy/L/W”%~f0“%~f0”2^>Nul”
)如果未定义键,则不设置“键=%%#”
设置“键=%Key:~-1%”
SetLocal EnableDelayedExpansion
如果未定义,则键回显。&后藤:嗨
如果%BS%=^%Key%(Set/P“=%BS%%BS%%%file%\%dt%.日志&sqlplus-S-L%user%/!Line!@%A<%file%.%extension%>%file%\%dt%.日志
后藤:结束
:EXECLINUX
对于(%servers%)中的/f%%A,请调用回显服务器:%%A和回显服务器:%%A>>%file%\u%dt%.日志和回显y |%PLINK%%user%@%A-pw!Line!“退出”和%PLINK%%user%@%A-pw!Line!-批处理-m%file%.%extension%>%file%\udt%.log和ECHO.>%file%\udt%.log
后藤:结束
:结束
暂停

请将您的问题更加明确:您使用的是什么数据库?SQL Server(版本)?MySQL?Oracle?如果您使用的是SQL Server,您是否阅读过SQLCMD()的文档?很抱歉,我使用Oracle 10g数据库感谢Dazzal的帮助这非常有用,但仍然存在一个问题,因为日志文件为空,即使我尝试在TOAD上运行查询并返回结果。下面是脚本:@echo off sqlplus-s-l DBUserName/dbPassword@DBName@SQLFile.sql>ResultFile。txt@Manaysah如果你u登录到sqlplus,然后在没有DOS批处理的情况下运行该脚本,它会输出任何内容吗?如果它使用dbms_输出输出输出数据,那么请确保您的脚本在topDazzal将serveroutput设置为大小1000000
,感谢SQL文件中存在的问题,SQL应该包含在双引号中。我包含了“”字符但出现的另一个问题是“@”字符。将“@”替换为“开始”解决了问题,但结果似乎无关紧要。结果文件类似于“SQL*Plus:Release 11.2.0.2.0产品版权(c)1982年、2010年,Oracle。保留所有权利……”问题解决了问题是将查询放入双引号中问题解决了,用分号(;)替换它@DazzaL谢谢,但即使使用
退出;
批处理文件仍然挂起…有什么想法吗?