Вопрос

Я получил ошибку "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'));
Это было полезно?

Решение

Это простая ошибка синтаксиса: пункт о значениях требует, чтобы все обернуто в скобки:

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

1 row created.

SQL>

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


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

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

declare
    r23 t23%rowtype;  -- record declaration
begin
    r23.id := 1;
    r23.created := sysdate;
    -- insert using record variable
    insert into t23
    values r23; 
end;
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top