ifists 명령(sybase를 데이터베이스로)을 사용할 때 unix 스크립트에서 잘못된 구문 오류가 발생합니다.

ifists 명령(sybase를 데이터베이스로)을 사용할 때 unix 스크립트에서 잘못된 구문 오류가 발생합니다.

다음 스크립트에서 다음 오류가 발생합니다.

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유사했을 것입니다).

관련 정보