2012-03-05 3 views
1

У меня есть создать следующие таблицы и типы ....sql oracle. Процедура курсор петли

CREATE TYPE ACTOR_QUOTE_TYPE AS OBJECT ( 
Movie_Title CHAR(36), 
Year NUMBER, 
Role CHAR(36), 
Quote CHAR(255) 
) 
/

CREATE TYPE AQ_NT AS TABLE OF ACTOR_QUOTE_TYPE 
/

CREATE TABLE ACTOR_QUOTES (
ACTORID CHAR(5), 
QUOTES AQ_NT 
) NESTED TABLE QUOTES STORE AS ACTOR_QUOTES_NT 
/

Мне нужно создать .....

PL/SQL процедуры, называемые INIT_ACTOR_QUOTES без каких-либо параметров, которые:

Считывает ВСЕ ACTORID из таблицы ACTOR и вводит их в атрибут ACTORID для каждой строки таблицы ACTOR_QUOTES (таблицы имеют одинаковую мощность) и одновременно вводит следующие начальные значения в первую строку только из ЦИТАТЫ вложенной таблицы в каждую строку таблицы ACTOR_QUOTES;

(MOVIE_TITLE, год, роль, Quote) устанавливаются соответственно (' ' NULL,'', ' «)

Также и в то же время, сразу после каждого использования INSERT DELETE, чтобы удалить все строки из вложенной таблицы в каждой строке, принадлежащей каждому ACTORID в таблице ACTOR_QUOTES.

Я получаю ошибку компиляции с кодом ....

CREATE OR REPLACE PROCEDURE INIT_ACTOR_QUOTES 
AS 
CURSOR actorID_cursor IS 
SELECT actorID FROM Actor; 
BEGIN 

FOR row IN actorID_cursor LOOP 
INSERT actorID INTO ACTOR_QUOTES; 

INSERT INTO actor_Quotes_NT VALUES ('', NULL, ' ', ''); 
DELETE (*) FROM actor_Quotes_NT ('', NULL, ' ', ''); 
END LOOP; 
END INIT_ACTOR_QUOTES ; 

/
Warning: Procedure created with compilation errors. 






SQL> show errors; 
Errors for PROCEDURE INIT_ACTOR_QUOTES: 

LINE/COL ERROR 
-------- ----------------------------------------------------------------- 
7/2  PL/SQL: SQL Statement ignored  
7/9  PL/SQL: ORA-00925: missing INTO keyword 
9/2  PL/SQL: SQL Statement ignored 
9/10  PL/SQL: ORA-00928: missing SELECT keyword 
SQL> 

Любая помощь, пожалуйста ....

+0

После получения сообщения «Процедура, созданная с ошибками компиляции» вы можете ввести 'SHOW ERRORS'' (или просто« SHO ERR'), чтобы увидеть эти ошибки. Фактически, все мои сценарии сценариев SQL включают «SHOW ERRORS», в конце: если есть ошибка, я обязательно захочу ее увидеть, а если нет, тогда «SHOW ERRORS», просто распечатайте «Нет ошибок». – ruakh

+0

Кстати, '' NULL'' - это не то же самое, что 'NULL'. '' NULL'' - строка с четырьмя символами; «NULL» - это особое значение, означающее примерно «неизвестный» или «неопределенный». В Oracle (хотя и не в других СУБД), '' '' совпадает с 'NULL'. – ruakh

+0

Предупреждение. Процедура, созданная с ошибками компиляции. SQL> показать ошибки; Ошибки для PROCEDURE INIT_ACTOR_QUOTES: LINE/COL ERROR 7/2 PL/SQL: SQL заявление игнорировали 7/9 PL/SQL: ORA-00925: отсутствует ключевое слово INTO 9/2 PL/SQL: SQL Statement игнорировали 9/10 PL/SQL: ORA-00928: отсутствует ключевое слово SELECT SQL> – user1055487

ответ

3

Первая ошибка: при вставке в таблицу мы должны вставить значения в все катушки или иначе укажите только те, которые мы заполняем.

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

В-третьих: при заполнении пользовательского типа мы должны указать тип в задании.

В-четвертых: при заполнении вложенной таблицы мы должны называть ее и тип объекта, который он собирает.

В-пятых: вложенная таблица представляет собой столбец таблицы и поэтому должна быть назначена в инструкции INSERT или подзаголовком с UPDATE.

Так что вы действительно хотите что-то, который выглядит следующим образом:

insert into ACTOR_QUOTES 
    (actorid, quote)s 
values 
    (row.actorid 
     , AQ_NT ( 
      ACTOR_QUOTE_TYPE 
      ('Dirty Harry', 1970, 'Inspector Callahan', 'Do you feel lucky punk?') 
      , ACTOR_QUOTE_TYPE 
      ('Sudden Impact', 1983, 'Inspector Callahan', 'Make my day') 
     ) 
    ); 

Кстати, на тему добытых имени переменных, не называйте ничего AQ. Это признанная аббревиатура для функции Oracle Advance Queuing, поэтому она просто вызовет мир замешательства.

Смежные вопросы