2015-02-05 24 views
0

當運行運行另一個SQL文件的批處理(.BAT)文件時,出現ORA 0955錯誤。不太可能ORA 0955錯誤

Batch File

批號:

@echo off 
setlocal 
set "SqlUserName=" 
set "SqlPassword=" 
set "SqlDatabase=" 
:Credentials 
set /P "SqlUserName=Enter username: " 
set /P "SqlPassword=Enter password: " 
set /P "SqlDatabase=Enter database: " 
@(
echo whenever sqlerror exit failure 
echo connect %SqlUserName%/%SqlPassword%@%SqlDatabase% 
echo @C:\Users\njediaz\Desktop\sql.sql 
echo exit 
) | sqlplus.exe -s /nolog 
if errorlevel 1 goto Credentials 
echo About to exit. 
timeout /t 30 
endlocal 

SQL.sql代碼

--conn cpi/[email protected] 
--conn &&[email protected]&&DBNAME 

SET HEADING OFF; 
SET ECHO OFF; 
SET PAGES 999; 
SET LONG 999999; 
SET LONGCHUNKSIZE 999999; 
SET PAGESIZE 0; 
SET LINESIZE 500; 

/****************/ 
/*BACKUP Scripts*/ 
/****************/ 

--Use SPOOL then set the filename and location of the scripts to be saved.-- 
--Use DBMS_METADATA.get_ddl and specifiy the OBJECT_TYPE, OBJECT_NAME and OWNER_NAME-- 

SPOOL C:\GeniisysUpdater\Backup\Scripts\GIAC_ORDER_OF_PAYTS_PKG.pks 
SELECT DBMS_METADATA.get_ddl ('PACKAGE_SPEC', 'GIAC_ORDER_OF_PAYTS_PKG', 'CPI') FROM DUAL; 
SPOOL OFF 
HOST ECHO/>> C:\GeniisysUpdater\Backup\Scripts\GIAC_ORDER_OF_PAYTS_PKG.pks 

SPOOL C:\GeniisysUpdater\Backup\Scripts\GIAC_ORDER_OF_PAYTS_PKG.pkb 
SELECT DBMS_METADATA.get_ddl ('PACKAGE_BODY', 'GIAC_ORDER_OF_PAYTS_PKG', 'CPI') FROM DUAL; 
SPOOL OFF 
HOST ECHO/>> C:\GeniisysUpdater\Backup\Scripts\GIAC_ORDER_OF_PAYTS_PKG.pkb 

/*********************/ 
/*INSTALL New Scripts*/ 
/*********************/ 

SPOOL C:\GeniisysUpdater\Install\Scripts\Logs\GIAC_ORDER_OF_PAYTS_PKG_pks.log 
@C:\GeniisysUpdater\Install\Scripts\GIAC_ORDER_OF_PAYTS_PKG.pks 
SPOOL OFF 

SPOOL C:\GeniisysUpdater\Install\Scripts\Logs\GIAC_ORDER_OF_PAYTS_PKG_pkb.log 
@C:\GeniisysUpdater\Install\Scripts\GIAC_ORDER_OF_PAYTS_PKG.pkb 
SPOOL OFF 

/***************************/ 
/*RECOMPILE Invalid Scripts*/ 
/***************************/ 

SPOOL C:\GeniisysUpdater\Install\Scripts\Logs\recompile_scripts.log 
@C:\GeniisysUpdater\Backup\rcpl.sql 
SPOOL OFF 

/***************************/ 
/*Check if batch is done*/ 
/***************************/ 

SPOOL C:\GeniisysUpdater\Install\Files\batchDone.log 
SELECT 1 FROM DUAL/
SPOOL OFF 

EXIT 

我試圖運行蟾蜍每個數據庫文件(PKS,PKB,SQL)和我沒有得到任何錯誤。

這裏是我的代碼下面的腳本:

GIAC_ORDER_OF_PAYTS_PKG.pks

GIAC_ORDER_OF_PAYTS_PKG.pkb

rcpl.sql

+1

如果您正在重新執行腳本,請確保在CREATE之前具有DROP語句以使腳本可以重新執行。另一個原因可能是你在陳述後得到了「/」,但是你已經用分號結束了前面的陳述。從而重新執行緩衝區中的語句。 –

+0

我應該刪除「/」嗎?或者分號? – ladiesman1792

+0

堅持終結者之一。分號用於單個語句,「/」用於塊。 –

回答

2

問題是與代碼不正確的空格評論之前。例如,該文本複製並粘貼到SQL * Plus:

create table only_execute_once(a number); 
/***************************/ 
/*RECOMPILE Invalid Scripts*/ 
/***************************/ 

而結果是這樣的:

SQL>  create table only_execute_once(a number); 

Table created. 

SQL>  /***************************/ 
SQL>  /*RECOMPILE Invalid Scripts*/ 
    create table only_execute_once(a number) 
       * 
ERROR at line 1: 
ORA-00955: name is already used by an existing object 


SQL>  /***************************/ 
SQL> 

SQL*Plus manual

您必須之後輸入一個空格斜槓星號(/ *)開始 評論。

雖然有記錄,但我仍然認爲這是一個錯誤。大多數時候這些評論都有效。 SQL * Plus解析器有幾個斜槓問題。

+0

我不認爲這是一個問題。 'FROM'dual之前的SQL'SELECT'; 'BEFOR ------ before SQL>/***************************/ SQL>/* RECOMPILE無效腳本*/ 'BEFOR ------ 之前 SQL>/************************** */ SQL> SELECT'FROM'dual;後 「AFTE ----- SQL>' –

+0

@LalitKumarB我添加了一個更好的例子。 –

+0

完美!你釘了它。然而,我認爲罪魁禍首會成爲斜線,並沒有期望它成爲評論。 +1 –