Как все говорили ... метод .equals - это то, что вам нужно.
В случайном случае вы использовали что-то вроде:
if(argv[0] == "a")
, тогда это не работает, потому что == сравнивает расположение двух объектов (физическое равенство), а не содержимое (логическое равенство) ).
Поскольку «a» из командной строки и «a» в исходном тексте вашей программы расположены в двух разных местах, == использовать нельзя. Вы должны использовать метод equals, который проверит, чтобы обе строки имели одинаковые символы.
Еще одно примечание ... «a» == «a» будет работать во многих случаях, потому что строки являются специальными в Java, но 99.9999999999999999% времени вы хотите использовать .equals.
Возможно, вам нужно мыслить более реляционно :)
Вместо хранения 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) для их хранения.
Вы пытаетесь втиснуть парадигму «ключ-значение» в реляционную СУБД, что не имеет логического смысла. Было бы намного проще перейти на чисто реляционный подход:
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 (красота реляционных СУБД)
Вы можете использовать ассоциативные массивы. Из руководства пользователя 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; /