programing

PL/SQL에서 맵과 유사한 객체 유형?

testmans 2023. 9. 12. 19:53
반응형

PL/SQL에서 맵과 유사한 객체 유형?

PL/SQL에 맵과 같은 객체 타입을 작성하고 싶습니다.즉, 키 값 쌍 목록은 값이 다른 키 값 쌍 목록이 될 수 있습니다.간단해요, 전 그렇게 생각했어요.다음은 두 가지를 단순화한 것입니다.

CREATE OR REPLACE TYPE TKey AS OBJECT
(
    name varchar2(240),
    value_text varchar2(2000),
    value_map TMap
)

CREATE OR REPLACE TYPE TMap AS TABLE OF TKey

아마 그렇게 간단하지는 않을 거예요, 왜냐하면 지금은 "닭이냐 달걀이냐" 문제가 생겼거든요.TKey를 먼저 넣으면 TMap이 정의되어 있지 않다고 불평할 것입니다.TMap을 먼저 넣으면 TKey가 정의되어 있지 않다고 불평할 것입니다.TKey를 넣고 value_map 행을 빼고 TMap 유형을 추가한 다음 TKey 유형을 교체하려고 하면 허용하지 않습니다.

제가 운이 없는 건가요?PL/SQL에서는 그러한 컨스트럭트가 불가능합니까?

미리 감사드립니다.

명확화:제가 원하는 것은 이것을 줄 수 있는 것입니다. a, b, c 키가 포함된 지도입니다.a의 값은 varchar "hello", b의 값은 varchar "world", c의 값은 다른 맵으로, 키 x와 y는 "what's", y는 "up"입니다.

자바에서는 다음과 같은 모습을 보여집니다.

Map<String, Object> map = new HashMap<String, Object>();
map.set("a", "Hello");
map.set("b", "World");
Map<String, Object> child = new HashMap<String, Object>();
child.set("x", "What's");
child.set("y", "up");
map.set("c", child);

이제 저는 무엇이든 저장할 수 있는 "객체"와 같은 것은 불가능하다는 것을 알게 되었습니다.제가 필요한 것은 이 물건과 같은 종류의 물건 목록을 저장할 수 있는 물건입니다.그래서 기본적으로 나무, 예.

연관 배열을 사용할 수 있습니다.PL/SQL 사용자 가이드에서:

연관 배열 이해(표별 색인)

연관 배열은 각 키가 고유하고 배열에서 해당 값을 찾는 데 사용되는 키-값 쌍의 집합입니다.키는 정수 또는 문자열일 수 있습니다.

처음으로 키를 사용하여 값을 할당하면 해당 키가 연관 배열에 추가됩니다.동일한 키를 사용하는 후속 할당은 동일한 항목을 업데이트합니다.고유한 키를 선택하는 것이 중요합니다.예를 들어 키 값은 데이터베이스 테이블의 기본 키, 숫자 해시 함수 또는 고유한 문자열 값을 형성하기 위해 연결된 문자열에서 가져온 것일 수 있습니다.

예를 들어 문자열인 키를 사용하여 연관 배열 유형과 해당 유형의 두 배열을 선언합니다.

예제 5-1 컬렉션 유형 선언

DELECORE TYPE population_type은 VARCHAR2(64)에 의한 번호 인덱스 표입니다.국가_인구_유형;대륙_인구_유형;몇 개의 숫자;VARCHAR2(64).시작한다.country_population('Greenland') : = 100000; -- 새 항목을 만듭니다.country_population('Iseland') : = 750000; -- 새 항목을 만듭니다.-- as와 연관된 값을 찾습니다.끈을 매다몇 := country_population('Greenland');continent_population('호주') := 30000000;continent_population('Antarctica') := 1000; -- 새 항목을 만듭니다.continent_population('Antarctica') := 1001; -- 이전 값을 대체합니다.-- 알파벳 순으로 'Antarctica'를 반환합니다.
:= 대륙_인구.첫번째;-- 알파벳 순으로 마지막에 오는 '호주'를 반환합니다.:= 대륙_인구.마지막;-- 마지막 키에 해당하는 값을 반환합니다.-- 호주의 인구를 조사합니다.
몇 : = 대륙_인구(continent_population).마지막);끝;/

아마 좀 더 관계적으로 생각해 볼 필요가 있을 겁니다 :)

(T Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ )value_map) 타입 ) TKey 에 만 에 만 value_map_name 표의 하는 데 할 수 . 즉 의 을 하는 할 할 의 을 하는

CREATE OR REPLACE TYPE TKey AS OBJECT(
 name varchar2(240),
 value_text varchar2(2000),
 value_map_name varchar2(240));

그런 다음 연관 배열(mamboking의 답변에 따라)을 사용하여 저장할 수 있습니다.

키 값 패러다임을 논리적으로 이해할 수 없는 관계형 DBMS에 끼워 넣으려고 하는 것입니다.순수한 관계로 가는 것이 훨씬 쉬워질 것입니다.

CREATE TABLE key_value AS
(
    key varchar2(240),        -- PRIMARY KEY
    value_text varchar2(2000)
);

CREATE TABLE key_hierarchy AS
(
    child_key varchar2(240), -- PRIMARY KEY, FOREIGN KEY to key_value.key
    parent_key varchar2(240) -- FOREIGN KEY to key_value.key
);

그것으로 끝!나중에 자녀가 부모를 많이 가질 수 있음을 변경하려면 PK 제약 조건(관계형 DBMS의 미)만 변경하면 됩니다.

언급URL : https://stackoverflow.com/questions/996386/map-like-object-type-in-pl-sql

반응형