2013-04-18 5 views
1

bash에서 SQL 스크립트를 실행 중입니다. 스크립트 중 하나가 정상적으로 실행되고 있지만 다른 스크립트는 실패합니다. 당신은 같은 것에 대한 원인이 될 수있는 조언을 해줄 수 있습니까?SQL 스크립트가 bash에서 실행되지 않습니다.

#!/bin/bash 
sqlplus -S user/[email protected] << EOF 
whenever sqlerror exit sql.sqlcode; 
set echo off 
set heading off 
@MyScript1 
@MyScript2 
exit; 
EOF 

오류 : 이 SP2-0310: unable to open file "MyScript2.sql"

유닉스에서 모두에 대한 액세스 수준은 다음과 같습니다

-rwxrwxrwx MyScript1.sql 
-rwxrwxrwx MyScript2.sql 

오류는 파일 MyScript2.sql에 액세스 할 수 없음을 표시를 준다. 하지만 내가 궁금한 점은 같은 폴더에있는 MyScript1.sql에 액세스 할 수있는 방법은 무엇입니까? MyScript2.sql은 아닙니까?

또한 파일이있는 폴더에서 unix (SQL * Plus를 사용하여) 파일을 실행해도 정상적으로 작동합니다. 하지만 다른 폴더에서 같은 폴더를 실행하면 그렇지 않습니다. 예를 들어 아래의

+0

실제로 'MyScript1'의 명령이 실행됩니까? '@ MyScript1' 행을 주석 처리하면 어떻게됩니까? – 9000

+0

예'MyScript1'이 실행됩니다. '@ MyScript1'을 주석 처리하면 'SP2-0310 : MyScript2 파일을 열 수 없습니다.'오류 만 표시됩니다.sql "' – misguided

+0

내 말은 지금까지 'MyScript2.sql' 대'Myscript2.sql' 같은 이름의 오타가 있습니다.'MyScript2.sql '의 이름을 어떻게 든 다르게 바꾸려고 했습니까? – 9000

답변

3

그것에게 더 나은

/Folder/having/the/files

모두 MyScript1.sqlMyScript2.sql 실행 잘

/Some/random/folder

MyScript1.sql 실행 미세하지만 MyScript2.sql 오류를 설명 당신은 말했다됩니다

if I run the file just in unix (using SQL*Plus) from the folder where the files are present it works fine. But if I run the same from a different folder it doesn't.

다른 폴더에서 SQL 파일이있는 위치로 bash 스크립트를 실행하는 경우, SQL * Plus가 이들을 찾을 위치를 어떻게 예상합니까? 질문은 '왜 MyScript2.sql을 볼 수 없으며, 왜 일 수 있습니까?MyScript1.sql입니다. 분명한 대답은보고있는 파일의 버전을 볼 수 없거나 적어도 볼 수 없다는 것입니다. SQL*Plus documentation에서

: -, 당신이 bash는 스크립트를 실행할 때 앉아있는 당신은 SQL 파일의 전체 경로를 제공하지 않은 경우

SQL*Plus searches for SQL scripts, including login.sql, in the current directory and then in the directories specified by SQLPATH, and in the subdirectories of SQLPATH directories.

그래서, 현재 작업 디렉토리에서 검색합니다 bash 스크립트가 들어있는 디렉토리가 아닙니다 (예 : pwd) - $SQLPATH (설정되어있는 경우).

그 중 하나에 MyScript1.sql 사본이 있거나 실제 파일에 대한 소프트 링크가있을 수 있습니다. 추측해야만한다면, 원래 MyScript.sql 스크립트와 동일한 디렉토리를 작성한 다음 MyScript2.sql을 작성하기 전에 다른 디렉토리에 복사했다고 추측 할 수 있습니다. 어떤 경우에 실행중인 MyScript1.sql이 오래되었거나 앞으로 그렇게 될 가능성이 있습니다.

간단히 대답하면 @ 명령의 일부로 SQL 파일의 전체 경로를 지정하거나 SQL * Plus를 시작하기 전에 bash 스크립트에서 해당 디렉토리로 변경하는 것입니다.

관련 문제