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
운영게시판
최근게시물
Cache Q&A 1062 게시물 읽기
No. 1062
[COS/SQL] 오브젝트 참조에 관계 삽입하는 방법
작성자
엔트리학생
작성일
2010-02-17 17:08
조회수
7,097

Cache Entree 교육을 받으신 분들은 Person-Company 간의 관계를 기억하실 겁니다.

이렇게 관계를 맺어 두면, 그냥 단순히 %Integer로 두는 것 보다

- Cache SQL 기능 중 '->' 참조 연산자를 사용해 Join 연산을 없앨 수도 있고
(가령, select Employer->Company, Employer->Address_City from Person 으로 Person테이블에 없는 필드를 액세스할 수 있음),

- XML로 데이터 내보내기를 할 때 Employer의 전체 필드 내용을 내보낼 수 있고,

- Web Services (SOAP) 에서 Employer 전체 필드를 XML 오브젝트로 전송할 수도 있고,

- 웹 폼 마법사 등의 각종 마법사에서 해당 클래스 프로퍼티를 직접 선택할 수도 있는 등

여러 기능이 추가적으로 제공될 수 있다는 것을 배웠습니다. 그러면, 여기서 질문 이와 같은 관계를 데이터 삽입 시에는 어떻게 할 수 있을까요?

 

 

 

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

질문 내용이 데이터 삽입 시에 Person에 Employer 값을 어떻게 알려 주느냐가 되겠네요. 이것은 오브젝트스크립트를 사용할 때와 SQL을 사용할 때로 나누어 설명해야 겠네요.

오브젝트스크립트로 Employer 값 주기

오브젝트에서 Employer 값을 숫자 값으로 주면 아래와 같이 삽입 시에 참조 값이 제대로 들어가지 않습니다. 

ENTREE>set a=##class(Person).%New()
 
ENTREE>set a.Name="Test"
 
ENTREE>s a.Employer="1"
 
ENTREE>w a.%Save()
1

여기서, Person의 값은 정상 저장된 것으로 나옵니다. 하지만, 메모리에 있는 a 변수를 릴리즈(kill)한 후 다시 불러오면 아래와 같이보입니다.

ENTREE>k

ENTREE>set a=##class(Person).%OpenId(1)

ENTREE>w a.Name
Test
ENTREE>w a.Employer
 
ENTREE>

이는 아마도 Cache가 삽입/갱신 시에 참조 값의 주소를 함께 입력하기 때문인 것 같습니다.  

이 경우에는, 아래와 같이 실제 Company 오브젝트를 열어서 해당 오브젝트의 참조값(OREF)을 주어 저장하면 제대로 저장할 수 있습니다.

ENTREE>set a.Employer=##class(Company).%OpenId(1)
 
ENTREE>write a.%Save()
1
ENTREE>k
 
ENTREE>set a=##class(Person).%OpenId(1)
 
ENTREE>w a.Employer
2@User.Company
ENTREE>w a.Employer.Company
IntraData.com
ENTREE>

이는 자바나 닷넷 등 모든 오브젝트 연결에 동일하게 적용되므로 기억해 두었다가 적용하시기 바랍니다.

 

Cache SQL에서 Employer값 주기

이것은 오브젝트일 때 보다 매우 간단합니다. 그냥 숫자 값을 입력하듯이 삽입하면, Cache가 알아서 레퍼런스 값으로 넣어 줍니다. 아래 예제처럼 하면 잘 입력이 된 것을 확인할 수 있습니다.

update Person
set Employer=1
where id=1
 

위와 같이 DML문으로 갱신한 후 아래 문장으로 확인합니다.

select Name,EMployer,Employer->Company from Person

# Name Employer Company
1 Test 1 IntraData.com

 

 

 

엔트리선배님이 2010-02-18 11:26에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1065[웹-CSP] 첨부파일 업로드 하는 법 [1]
CSP개발자
2010-02-17
10105
1064%Text 타입 값 가져오기 [1]
검색
2010-02-17
10387
1063[COS] SSN 필드에 한국 주민번호를 생성되게 하려면? [1]
엔트리학생
2010-02-17
10719
1062[COS/SQL] 오브젝트 참조에 관계 삽입하는 방법 [1]
엔트리학생
2010-02-17
7097
1061ODBC 연결시 Connection String 예시
CacheODBC
2010-02-08
7410
1060오브젝트 컬렉션을 SQL에서 쿼리하려면
오브젝트모델링
2010-02-02
6383
1059Cache에서 오류 이해하기
오류맨
2010-02-02
6488
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.053초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다