2009-10-20 3 views
2

Informix SQL의 'isql'명령을 사용하여 IBM Informix Dynamic Server 버전 10.00.FC9 (이 게시물에 대한 Jonathan Leffler의 답변 here 참조)에서이 저장 프로 시저를 만드는 데 문제가 있습니다.ISQL 명령을 사용하여 Informix 저장 프로 시저를 만들 수 없습니까?

나는 RETURNING CHAR(8)

전 근처에 자신의 두 가지 예 각각에 대한 ( 문자에 오류가 발생합니다. 1 :

CREATE PROCEDURE ampm_time(tm SMALLINT) RETURNING CHAR(8); 
    DEFINE hh SMALLINT; 
    DEFINE mm SMALLINT; 
    DEFINE am SMALLINT; 
    DEFINE m3 CHAR(3); 
    DEFINE a3 CHAR(3); 
    LET hh = MOD(tm/100 + 11, 12) + 1; 
    LET mm = MOD(tm, 100) + 100; 
    LET am = MOD(tm/1200, 2); 
    LET m3 = mm; 
    IF am = 0 
    THEN LET a3 = ' am'; 
    ELSE LET a3 = ' pm'; 
    END IF; 
    RETURN (hh || ':' || m3[2,3] || a3); 
END PROCEDURE; 

ex. 2 :

그들은 내가 링크 된 게시물에 묻는 문제를 해결하기위한 노력의 일환으로 조나단 레플러 (Informix의 마술사 비범)에 의해 설계되었습니다
CREATE PROCEDURE ampm_time(tm SMALLINT) RETURNING CHAR(8); 
    DEFINE i2 SMALLINT; 
    DEFINE hh SMALLINT; 
    DEFINE mm SMALLINT; 
    DEFINE am SMALLINT; 
    DEFINE m3 CHAR(3); 
    DEFINE a3 CHAR(3); 
    LET i2 = tm/100; 
    LET hh = MOD(i2 + 11, 12) + 1; 
    LET mm = MOD(tm, 100) + 100; 
    LET i2 = tm/1200; 
    LET am = MOD(i2, 2); 
    LET m3 = mm; 
    IF am = 0 
    THEN LET a3 = ' am'; 
    ELSE LET a3 = ' pm'; 
    END IF; 
    RETURN (hh || ':' || m3[2,3] || a3); 
END PROCEDURE; 

. 의도 한 결과는 군사 시간을 유지하는 INT 데이터 유형을 오후 2시 30 분 형식 형식으로 변환하는 것입니다.

+0

IDS 10.00을 사용하는 경우 i2 변수없이 SP 버전을 사용할 수 있습니다. ISQL의 버전은 7.32 또는 7.31 또는 7.30 일 수도 있습니다. 현재 버전은 7.50이고, 7.32는 나쁘게 오래된 버전이 아닙니다. –

+0

어쩌면 informix가 v7.3이라고 생각한 이유는 무엇일까 ... 지금은 약 1 년 동안이 시스템을 사용해 왔지만, 일이 끝나면 버전을 신경 쓰지 않아도됩니다. – CheeseConQueso

+0

그 이유는 혼란스러워. 또한 (나 같은) 누군가가 버전을 묻는 경우 버전 번호 정보를 제공하면 상황을 파악하는 데 도움이되는 이유이기도합니다. FWIW : ISQL 7.50으로 업그레이드해도 'isql이 저장 프로 시저를 좋아하지 않습니다.'라는 문제가 해결되지 않습니다. 또한 IDS 10.00은 이제 지원되는 가장 오래된 버전의 IDS임을 기억하십시오. 당신은 최신 버전 중 하나에 있지만, IDS 업그레이드는 내년 정도의 계획에 있어야합니다. –

답변

2

이 문제는 DB-Access 대 ISQL입니다.

ISQL은 변형 된 유머 감각을 가지고 있으며 SQL 구문이 현재 Informix OnLine 4.10 (또는 그 당시의 INFORMIX-OnLine 4.10)과 여전히 일치한다고 생각합니다. 특히 저장 프로 시저가 세미콜론으로 구분 된 여러 문으로 구성되어 있으며 SQL 문이 문자열이나 주석이 아닌 첫 번째 세미콜론으로 끝난다는 가정을 잘못 알고 있습니다.

해결 방법 : 대신 ISQL의

  • 를 사용하여 DB-Access에서는 저장 프로 시저를 만들 수 있습니다.
  • IIUG Software Archive에서 SQLCMD를 가져 와서 대신 사용하십시오.
  • SQLCMD 소프트웨어의 'mkproc'을 사용하여 저장 프로 시저를 만듭니다.

가장 쉬운 방법은 DB-Access (dbaccess - 서버 소프트웨어가있는 $ INFORMIXDIR/bin에 있음)를 사용하는 것입니다.

관련 문제