다음 스크립트에서 다음 오류가 발생합니다.
isql -U$DBLogin -PDBPAss -S$DBName -e <<!
use $db
go
if exists (select 1 from syscolumns where id = object_id('Main_table') and name = 'Stamm')
begin
insert into Main_table select * from temp_table
end
else
begin
create table Main_table
(
Stamm char (5),
Datum int,
Perdat char (5) null
)
go
insert into Main_table select * from temp_table
end
go
DROP TABLE temp_table
go
!
이렇게 하면 여러 번 시도한 후에도 여전히 다음 오류가 발생합니다.
오류 세부정보: (로그)
1> use db
1> if exists (select 1 from syscolumns where id = object_id('Main_table') and name = 'Stamm')
2> begin
3> insert into Main_table select * from temp_table
4> end
5> else
6> begin
7> create table Main_table
8> (
9> Stamm char (5),
10> Datum int,
11> Perscd char (5) null
12> )
Msg 102, Level 15, State 181:
Server 'DB_DEVP', Line 12:
Incorrect syntax near ')'.
1> insert into Main_table select * from temp_table
2> end
Msg 156, Level 15, State 2:
Server 'DB_DEVP', Line 2:
Incorrect syntax near the keyword 'end'.
1> DROP TABLE db..temp_table
답변1
이는 쉘 스크립트 문제가 아니라 SQL 구문 문제입니다.
오류 출력으로 판단하면 다음과 같습니다.
1> use db
1> if exists (select 1 from syscolumns where id = object_id('Main_table') and name = 'Stamm')
2> begin
처음 두 줄은 단일 명령으로 처리되는 것으로 보이며, 이것이 데이터베이스 엔진이 구문 오류를 감지하는 이유일 수 있습니다. 두 개의 명령으로 분리해야 할 수도 있습니다. 저는 Sybase에 대해 모르지만 use $db;
여기 문서의 첫 번째 줄로 사용해 보세요.
그 외에는 쉘 스크립트에 심각한 문제가 없습니다. 내가 언급해야 할 유일한 것은 큰 따옴표 $DBLogin
와 인수 확장이 부족 $DBName
하고 명령으로 리디렉션되는 문서의 틀에 얽매이지 않는 (법적 임에도 불구하고) 구분 기호입니다 isql
(사용했거나 END_SQL
유사했을 것입니다).