Нужна помощь по Oracle 10g Express Edition - PullRequest
1 голос
/ 07 декабря 2010

При попытке вставить запись в таблицу ниже я получил ошибку «ora-03001: невыполненная функция». Я искал всю ночь, все еще не повезло. Я использую Oracle10g Express Edition.

create or replace type MajorsType As varray(20) of varchar2(10);

create or replace type studenttype as object (
stuID varchar2(5),
lastName varchar2(15),
firstName varchar2(12),
majors MajorsType)
INSTANTIABLE
NOT FINAL;

create table Student of StudentType (
constraint student_stuID_pk PRIMARY KEY(stuID));

INSERT INTO student values StudentType ('S999', 'Smith', 'John', MajorsType('Math', 'Accounting'));

1 Ответ

3 голосов
/ 07 декабря 2010

Это простая синтаксическая ошибка: предложение VALUES требует, чтобы все было заключено в скобки:

SQL> INSERT INTO student
  2  values ( StudentType ('S999', 'Smith', 'John', MajorsType('Math', 'Accounting')))
  3  /

1 row created.

SQL>

Это применимо, независимо от того, передаем ли мы несколько скалярных значений или один тип.


Единственный случай, когда он не применяется, это вставка в PL / SQL с использованием типа RECORD. Что не имеет отношения к вашей ситуации, но я упоминаю это для полноты.

Вставка переменной RECORD будет выглядеть примерно так

declare
    r23 t23%rowtype;  -- record declaration
begin
    r23.id := 1;
    r23.created := sysdate;
    -- insert using record variable
    insert into t23
    values r23; 
end;
...