Подобный карте тип объекта в МН / SQL?

Как все говорили ... метод .equals - это то, что вам нужно.

В случайном случае вы использовали что-то вроде:

if(argv[0] == "a")

, тогда это не работает, потому что == сравнивает расположение двух объектов (физическое равенство), а не содержимое (логическое равенство) ).

Поскольку «a» из командной строки и «a» в исходном тексте вашей программы расположены в двух разных местах, == использовать нельзя. Вы должны использовать метод equals, который проверит, чтобы обе строки имели одинаковые символы.

Еще одно примечание ... «a» == «a» будет работать во многих случаях, потому что строки являются специальными в Java, но 99.9999999999999999% времени вы хотите использовать .equals.

7
задан 15 June 2009 в 14:50
поделиться

3 ответа

Возможно, вам нужно мыслить более реляционно :)

Вместо хранения TMap ( 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) для их хранения.

4
ответ дан 6 December 2019 в 08:45
поделиться

Вы пытаетесь втиснуть парадигму «ключ-значение» в реляционную СУБД, что не имеет логического смысла. Было бы намного проще перейти на чисто реляционный подход:

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 (красота реляционных СУБД)

1
ответ дан 6 December 2019 в 08:45
поделиться

Вы можете использовать ассоциативные массивы. Из руководства пользователя PL / SQL:

Общие сведения об ассоциативных массивах (таблицы индексации)

Ассоциативные массивы - это наборы пар ключ-значение, где каждый ключ уникален и используется для поиска соответствующего значения в массиве. Ключ может быть целым числом или строкой.

Назначение значения с использованием ключа впервые добавляет этот ключ в ассоциативный массив. Последующие назначения с использованием одного и того же ключа обновляют ту же запись. Важно выбрать уникальный ключ. Например, значения ключей могут поступать из первичного ключа таблицы базы данных, из числовой хэш-функции или из конкатенации строк для формирования уникального строкового значения.

Например, вот объявление типа ассоциативного массива и два массива этого типа, использующие ключи, которые являются строками:

Пример 5-1 Объявление типов коллекций

DECLARE  TYPE population_type IS TABLE OF NUMBER INDEX BY VARCHAR2(64);
  country_population population_type;
  continent_population population_type;
  howmany NUMBER;
  which VARCHAR2(64);
BEGIN
  country_population('Greenland') := 100000; -- Creates new entry
  country_population('Iceland') := 750000;   -- Creates new entry
-- Looks up value associated with a string
  howmany := country_population('Greenland');
  continent_population('Australia') := 30000000;
  continent_population('Antarctica') := 1000; -- Creates new entry
  continent_population('Antarctica') := 1001; -- Replaces previous value 
-- Returns 'Antarctica' as that comes first alphabetically.
  which := continent_population.FIRST;
-- Returns 'Australia' as that comes last alphabetically.  which := continent_population.LAST;
-- Returns the value corresponding to the last key, in this
-- case the population of Australia.
  howmany := continent_population(continent_population.LAST);
END;
/
16
ответ дан 6 December 2019 в 08:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: