ошибки в процедуре pl/sql: ora 00947: not enough values pl/sql: sql statement ignored

misja
Дата: 06.12.2012 11:26:03
Добрый день! Подскажите пожалуйста :(
Oracle 9.2 Процедура заполняет таблицу TSTOR с виьюхи v027 данными удовлетворяющими определенным условиям

create or replace procedure TSTOR is
c number(3);
cursor CUR is
SELECT FAM,IMJ,OTCH,DT_ROJD_Y,DT_ROJD_M,DT_ROJD_D
from V027 where (...)
group by FAM,IMJ,OTCH,DT_ROJD_Y,DT_ROJD_M,DT_ROJD_D;
begin
FOR REC in CUR loop
SELECT count(*) into c from V027 where (...)
and fam=REC.fam and imj=REC.imj and otch=REC.otch and
dt_rojd_y=REC.dt_rojd_y and dt_rojd_m=REC.dt_rojd_m and dt_rojd_d=REC.dt_rojd_d;
if c > 1 then
begin
INSERT INTO TSTOR(FAM, IMJ, OTCH, DT_ROJD_Y, DT_ROJD_M, DT_ROJD_D, PR_VID, DT_VYG, FLAG, N_PROT )
SELECT
FAM,IMJ,OTCH,DT_ROJD_Y,DT_ROJD_M,DT_ROJD_D,PR_VID,N_PROT
FROM V027 WHERE (...)
and fam=REC.fam and imj=REC.imj and otch=REC.otch and
dt_rojd_y=REC.dt_rojd_y and dt_rojd_m=REC.dt_rojd_m and dt_rojd_d=REC.dt_rojd_d;
exception
when dup_val_on_index then null;
COMMIT;
end;
end if;
END LOOP;
end TSTOR;

Выдает ошибки
pl/sql: ora 00947: not enough values
pl/sql: sql statement ignored

Подкажите, что не так???
ten
Дата: 06.12.2012 11:34:40
misja,
ORA-00947
orawish
Дата: 06.12.2012 11:58:13
misja
..
Подкажите, что не так???

вообще (и безотносительно ошибки) много что не так. говнокод обыкновенный.
не обижайтесь, но назвать ваше творчество иначе, никакой возможности нет
misja
Дата: 06.12.2012 12:06:00
orawish не обижаюсь :) сам догадывался не мой код от предшественников достался, нужно перенести срочно на другой сервак, решил пока как есть перенести
Proteus
Дата: 06.12.2012 12:07:18
Проще сказать что правильно:
Синтаксис структур begin end; For loop; if end if;
Больше правильного не нашел...
Человек и Кошка
Дата: 06.12.2012 12:09:38
Insert в процедуру - это пять!
Proteus
Дата: 06.12.2012 12:18:49
misja
orawish не обижаюсь :) сам догадывался не мой код от предшественников достался, нужно перенести срочно на другой сервак, решил пока как есть перенести


Похоже что "предшественники" это студенты параллельной группы. Этот код никогда не работал и работать не будет.
Изя Кацман
Дата: 06.12.2012 12:43:34
misja
Добрый день! Подскажите пожалуйста :(
Oracle 9.2 Процедура заполняет таблицу TSTOR с виьюхи v027 данными удовлетворяющими определенным условиям
create or replace procedure TSTOR is
c   number(3);
cursor CUR is
SELECT  FAM,IMJ,OTCH,DT_ROJD_Y,DT_ROJD_M,DT_ROJD_D
from V027   where (...) 
group  by FAM,IMJ,OTCH,DT_ROJD_Y,DT_ROJD_M,DT_ROJD_D;
begin
FOR REC in CUR loop
SELECT  count(*) into c from V027   where (...)
and  fam=REC.fam and imj=REC.imj and otch=REC.otch and
dt_rojd_y=REC.dt_rojd_y and dt_rojd_m=REC.dt_rojd_m and dt_rojd_d=REC.dt_rojd_d;
if c > 1 then
begin
INSERT INTO TSTOR(FAM, IMJ, OTCH, DT_ROJD_Y, DT_ROJD_M, DT_ROJD_D, PR_VID, DT_VYG, FLAG, N_PROT )
SELECT
FAM,IMJ,OTCH,DT_ROJD_Y,DT_ROJD_M,DT_ROJD_D,PR_VID,N_PROT
FROM V027 WHERE (...)
 and fam=REC.fam and imj=REC.imj and otch=REC.otch and
dt_rojd_y=REC.dt_rojd_y and dt_rojd_m=REC.dt_rojd_m and dt_rojd_d=REC.dt_rojd_d;
exception
when dup_val_on_index then null;
COMMIT;
end;
end if;
END LOOP;
end TSTOR;

Выдает ошибки
pl/sql: ora 00947: not enough values 
pl/sql: sql statement ignored

Подкажите, что не так???
Изя Кацман
Дата: 06.12.2012 12:49:54
orawish
вообще (и безотносительно ошибки) много что не так. говнокод обыкновенный.

Особенно опечалило:
exception
when dup_val_on_index then null;
COMMIT;
end;

Если такое значение ключа уже есть, то ничего не вставляем, но всё предыдущее коммитим
Потому не удастся откатить все изменения данных процедурой, хотя других коммитов нет
Геодезист
Дата: 06.12.2012 14:08:12
Эта процедура не могла работать, так как в INSERT прописано 10 полей

FAM, IMJ, OTCH, DT_ROJD_Y, DT_ROJD_M, DT_ROJD_D, PR_VID, DT_VYG, FLAG, N_PROT 


а в SELECT, который берет данные для INSERT - 8 полей

отсутствуют
DT_VYG, FLAG,