database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
ㆍInformix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Informix Q&A 2080 게시물 읽기
No. 2080
select에서 불려온 두개의 문자열 필드를 붙여서 볼수 없나요?
작성자
원종진
작성일
2004-11-25 17:56ⓒ
2004-11-25 18:38ⓜ
조회수
7,859

인포믹스를 이번에 처음 접해보는지라,

확실하진 않지만 서버가 인포믹스 다이나믹서버 7.3 인것 같습니다.

 

여기서 Select * from userdb

라는 쿼리를 날렸을때 불려온 필드중에 UserID와 IssueCnt 라는 필드가 있습니다.

 

둘다 varchar 형의 필드이고요, UserID는 not null입니다.

 

헌데 실제 프로그램에서 사용할 데이터는 이 두개의 필드가 붙어있는 형태의 자료를 사용할거거든요.

 

UserID=12345, IssueCnt=01 이라면 필요한 데이터는 1234501 이라는 스트링이 필요한거죠..

 

오라클에서는 문자열끼리 더할때 '+'를 썼었는데, 인포믹스에서는 '||'를 사용해서 문자열을 더하더군요.

 

그런데 한가지 문제가 되는것이 IssueCnt 필드가 Null 값일경우에는 이 두 필드를 더하면 아무런 값도 나오지 않는다는 것입니다.

뒤에 더해지는 필드가 널 값이면 그냥 아무것도 붙지 않은채로 앞의 값만 나와야 하는데, USerID || IssueCnt 의 결과가 아무것도 나오지 않는군요.

 

또 IssueCnt가 널 일 경우

Select * from userdb where IssueCnt = '' 요 쿼리로는 널값을 가진 레코드들이 불러지지 않습니다.

어찌해야 이 문제를 해결할수 있을까요?

 

Select * from userdb where IssueCnt = ''  이 쿼리와

Select * from userdb where IssueCnt  is null  이 쿼리가 서로 다르게 먹혀들면 코딩할때 노가다작업이 좀 들어갈것 같습니다. 이 두가지 쿼리를 어떻게 합칠수 없을까요?

 

또 널값을 가지는 varchar 를 || 연산을 했을경우 왜 결과값이 안나오는지도 알고 싶습니다.

이 글에 대한 댓글이 총 5건 있습니다.

아래의 문장으로 실행바람

Select * from userdb where IssueCnt is null

 

나광수님이 2004-11-25 18:11에 작성한 댓글입니다. Edit

아직 테스트 안해봤지만 아래처럼 해보세요.

 

select field01 || nvl(field02,'1') from tablename;

 

안되면 댓글 달아 주세요.

이호림님이 2004-11-25 18:13에 작성한 댓글입니다. Edit

호림님이 적어주신 쿼리를 사용해봤습니다.

헌데 뜻모를 에러가 나오더군요.

왜그런지 이유는 모르겠습니다.

 

-674

Routine(nvl) can not be resolved.

ISAM Error : no record found.

요런 에러가 나옵니다..

원종진(comternet)님이 2004-11-25 18:23에 작성한 댓글입니다.
이 댓글은 2004-11-25 18:26에 마지막으로 수정되었습니다.

-674 에러면... 이 에러는 해당 프로시저를 호출할수 있는

권한이 없을때 에러 납니다.

먼저 인포믹스 유저로 로그인 하셔서 아래와 같이 권한 주세요.

------------------------------------

grant dba to 사용자계정;

grant resource to 사용자계정;

------------------------------------

 

위와 같이 권한을 준후 다시 쿼리를 실행해 보세요.

그럼 될꺼에요.. 제가 막 방금전에 테스트 해봤는데 잘 되네요..

참고로 nvl 함수는 해당필드에 null 값이 있을때만 작동합니다.

update users set username='' where userid='abcd';

이렇게 하면 안되고요...

update users set username=null where userid='abcd';

이런식으로 해당 필드에 널값을 주고 nvl 해보세요. 됩니다.

그리고 username 필드는 not null 이 아닌 null 값이 허용되야 겠지요..

그럼 수고하세요...

이호림님이 2004-11-26 00:24에 작성한 댓글입니다. Edit

알고보니 인포믹스 버젼이 7.3 이하인것 같습니다.

nvl함수가 없는것 같군요.

 

하는수없이 결국 어정쩡한 스토어드프로시져로 해결했습니다.

if a is null then

  a = '';

end if;

 

-_-; 오라클만 주로 쓰다보니, 다른 DB에서는 이런 간단한 문제 해결하는데도 애를 먹게되는군요.

원종진님이 2004-11-27 15:24에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2084informix sql 에서의 시간 쿼리
최종근
2004-12-01
6762
2083jsp랑 mssql을 연동을 하다가 jsp랑 informix로 바뀌게 되어서
초보자
2004-11-30
6820
2082두개의 서버에 있는 DB를 하나의 서버로 옮기려고 하는데요.
방대영
2004-11-29
6011
2080select에서 불려온 두개의 문자열 필드를 붙여서 볼수 없나요? [5]
원종진
2004-11-25
7859
2079소스가 있는 서버랑 디비가 설치되어 있는 서버가 다를경우
초보자
2004-11-22
6273
2078기존의 MSSQL에서 INFORMIX로 데이터베이스를 변경하게 되어서
박재형
2004-11-22
6462
2077Error -33051: Syntax error on identifi'
이진희
2004-11-16
5815
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2022 DSN, All rights reserved.
작업시간: 0.083초, 이곳 서비스는
	PostgreSQL v14.2로 자료를 관리합니다