oracle 如何 修改 表 中 集合 的 值 ?

rhfm7lfc  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(173)

基本上,给定一个具有以下结构的表,我想在城市列表的末尾添加一个城市,这样它将在一次旅行中最后访问,并通过键盘输入数字/ID。

CREATE TYPE type_cities IS VARRAY(101) of varchar2(12);
    CREATE TABLE trip(
         trip NUMBER(4),
         name VARCHAR2(20), 
         cities type_cities,
         status varchar2(12) 
         );
    
    declare
        nrTrip number(4) := &nr;
        name_city varchar2(12) := &namecity;
        number_last number(4);
    begin
        number_last = trip(nrTrip).cities.count();
        trip(nrTrip).cities.extend();
        select name_city into trip(nrTrip).cities(number_last+1);
    end;

我不知道这样做所需的语法(我会问为什么它不起作用,如果可以的话,它不适用于

trip(nrTrip).cities(number_last+1) := name_city

两者之一)

kokeuurv

kokeuurv1#

这里 有 一 个 选项 :首先 获取 行 , 更新 它 ( 即 , 将 新 城市 添加 到 数组 中 ) , 更新 表 。
类型 和 表 :

SQL> CREATE TYPE type_cities IS VARRAY(101) of varchar2(12);
  2  /

Type created.

SQL> CREATE TABLE trip(
  2       trip   NUMBER(4),
  3       name   VARCHAR2(20),
  4       cities type_cities,
  5       status varchar2(12)
  6       );

Table created.

中 的 每 一 个
初始 记录 ( 否则 , 没有 要 * 更新 * 的 内容 ) :

SQL> insert into trip (trip, name, cities, status)
  2    values (1, 'Test', type_cities('London'), 'OK');

1 row created.

格式
程序 :

SQL> declare
  2      nrTrip    number(4) := &nr;
  3      l_row     trip%rowtype;
  4      name_city varchar2(12) := '&namecity';
  5      number_last number(4);
  6  begin
  7    select *
  8      into l_row
  9      from trip
 10      where trip = nrTrip;
 11
 12    number_last := l_row.cities.count;
 13
 14    l_row.cities.extend;
 15    l_row.cities(number_last + 1) := name_city;
 16
 17    update trip set cities = l_row.cities
 18       where trip = nrTrip;
 19  end;
 20  /
Enter value for nr: 1
Enter value for namecity: Zagreb

PL/SQL procedure successfully completed.

格式
结果 :

SQL> select * from trip;

      TRIP NAME                 CITIES                              STATUS
---------- -------------------- ----------------------------------- ------------
         1 Test                 TYPE_CITIES('London', 'Zagreb')     OK
                                                      --------
SQL>                                                  here it is

格式

相关问题