将元素添加到varray数据类型

时间:2018-12-12 00:36:17

标签: oracle plsql

假设我有一个名为test_1的表。该表的名为contact的一列(其数据类型为contact_datacontact_data的一列名为personalarray的列为personal的varray(另一数据类型)。我的问题是:如何向名为personale的varray添加元素?

create or replace type personal as OBJECT(
        name varchar2(30),
        last_name varchar2(30),
        charge varchar2(50),
        mail varchar2(100)
    );

    create or replace type personalarray as varray(3) of personal;


    create or replace type contact_data as OBJECT(
        mail varchar2(40),
        fax varchar2(20),
        personale personalarray
    );

    create table test_1(
           id int,
           contact contact_data
        ); 
        /  

我第一次知道如何插入,但是如何向该varray添加元素?这是我第一次在该列中插入的方法:

update test_1 set contact = contact_data('mail','+5622',personalarray(personal('Ju','Cuneo','president','anothermail')))

1 个答案:

答案 0 :(得分:1)

Oracle设置

AppCompatActivity

您可以创建一个函数来更新值:

$(document).ready( function() {
  $('#auto').load("static/l.txt");
  refresh();
});

function refresh() {
  setTimeout(function() {
    $('#auto').load("static/l.txt");
    refresh();
  }, 1000);
}

更新

create or replace type personal as OBJECT(
  name varchar2(30),
  last_name varchar2(30),
  charge varchar2(50),
  mail varchar2(100)
);
/

create or replace type personalarray as varray(3) of personal;
/


create or replace type contact_data as OBJECT(
  mail varchar2(40),
  fax varchar2(20),
  personale personalarray
);
/

create table test_1(
  id int,
  contact contact_data
); 
/

INSERT INTO test_1 (
  id,
  contact
) VALUES (
  1,
  contact_data(
    'mail',
    'fax',
    personalarray(
      personal( 'name1', 'lastname1', 'charge1', 'mail1' )
    )
  )
);

查询

CREATE FUNCTION updateContactDataPersonal(
  in_contact  IN test_1.contact%type,
  in_index    IN number,
  in_personal IN personal
) RETURN contact_data
IS
  p_contact contact_data := in_contact;
BEGIN
  IF ( p_contact IS NULL ) THEN
    p_contact := contact_data( NULL, NULL, personalarray() );
  END IF;
  IF ( p_contact.personale IS NULL ) THEN
    p_contact.personale := personalarray();
  END IF;
  IF ( in_index < 1 OR in_index > 3 ) THEN
    raise_application_error( -20001, 'Invalid index' );
  END IF;
  IF ( p_contact.personale.COUNT < in_index ) THEN
    p_contact.personale.extend( in_index - p_contact.personale.COUNT );
  END IF;
  p_contact.personale( in_index ) := in_personal;
  RETURN p_contact;
END;
/

输出

UPDATE test_1
SET   contact = updateContactDataPersonal( contact, 3, personal( 'name3', 'lastname3', 'charge3', 'mail3' ) )
WHERE id      = 1;