Использование таблиц записей в МН / SQL

Когда Вы пишете

map[key] = value;

нет никакого способа сказать, заменили ли Вы value для key, или если Вы создали новое key с value.

map::insert() только создаст:

using std::cout; using std::endl;
typedef std::map MyMap;
MyMap map;
// ...
std::pair res = map.insert(MyMap::value_type(key,value));
if ( ! res.second ) {
    cout << "key " <<  key << " already exists "
         << " with value " << (res.first)->second << endl;
} else {
    cout << "created key " << key << " with value " << value << endl;
}

Для большинства моих приложений, я обычно не забочусь, создаю ли я или заменяю, таким образом, я использую более легкое для чтения map[key] = value.

12
задан Brian Tompsett - 汤莱恩 30 October 2016 в 16:55
поделиться

3 ответа

Вы не расширяете таблицу, проиндексированную "чем-то", вы можете просто использовать это ...

DECLARE
   TYPE t_simple_object IS RECORD 
      ( wert   NUMBER
      , gs     NUMBER
      , vl     NUMBER
      ); 

   TYPE t_obj_table IS TABLE OF t_simple_object
   INDEX BY BINARY_INTEGER; 

   my_rec t_simple_object;
   obj t_obj_table; 
BEGIN
   my_rec.wert := 1;
   my_rec.gs := 1;
   my_rec.vl := 1;
   obj(1) := my_rec;
END;
/

Чтобы использовать синтаксис EXTEND, этот пример должен сделать это ...

DECLARE
   TYPE t_simple_object IS RECORD 
      ( wert   NUMBER
      , gs     NUMBER
      , vl     NUMBER
      ); 

   TYPE t_obj_table IS TABLE OF t_simple_object; 

   my_rec t_simple_object;
   obj t_obj_table := t_obj_table(); 
BEGIN
   obj.EXTEND;
   my_rec.wert := 1;
   my_rec.gs := 1;
   my_rec.vl := 1;
   obj(1) := my_rec;
END;
/

Также см. эту ссылку (Спросите Тома)

22
ответ дан 2 December 2019 в 03:54
поделиться

Вы не можете расширить ассоциативный массив. Просто присвойте ему значения

declare
  TYPE t_simple_object IS RECORD (
    wert   NUMBER,
    gs     NUMBER,
    vl     NUMBER);

  TYPE t_obj_table IS TABLE OF t_simple_object INDEX BY BINARY_INTEGER;

  simple_object t_simple_object;
begin
  simple_object.wert := 1;
  simple_object.gs := 2;
  simple_object.vl := 3;
  obj(1) := simple_object;
end;
/
8
ответ дан 2 December 2019 в 03:54
поделиться

Если вы не хотите использовать ассоциативный массив (также известный как индексная таблица), опустите предложение «INDEX BY BINARY_INTEGER». Тогда ваш код работает нормально:

declare 
    TYPE t_simple_object IS RECORD (
       wert   NUMBER,
       gs     NUMBER,
       vl     NUMBER);
    TYPE t_obj_table IS TABLE OF t_simple_object;
    obj t_obj_table;
begin  
    obj := t_obj_table ();
    obj.EXTEND();
end;
8
ответ дан 2 December 2019 в 03:54
поделиться
Другие вопросы по тегам:

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