powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка только уникальных записей
7 сообщений из 7, страница 1 из 1
Вставка только уникальных записей
    #40024875
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть экелька. Из нее импортирую в БД записи с помощью хранимой процедуры.
В эксельке пользователи могут дублировать записи. Такие вставлять не нужно.

Не могу разобраться , как переписать ХП, чтобы дубли не вставлялись.
Проверять на уникальность нужно только поле PATH.

При компиляции получаю ошибку
SQL Statement ignored
SQL command not properly ended



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
create or replace PROCEDURE INSERT_NEW_VALUE
(
    i_ID NUMBER,
    i_PARENT NUMBER,
    i_TYPE_OF_NODE NUMBER,
    i_CAPTION VARCHAR2,
    i_CAP VARCHAR2,
    i_PATH VARCHAR2 --,

 

) AS
BEGIN

     INSERT INTO MAIN
     (ID,              
     PARENT,           
     TYPE_OF_NODE,     
     CAPTION,          
     CAP,              
     PATH             
     )

     VALUES (
      i_ID,
      i_PARENT,
      i_TYPE_OF_NODE,
      i_CAPTION,
      i_CAP,
      i_PATH
     )
     where not EXISTS (select path from main where path = i_PATH );   
     COMMIT;
END INSERT_NEW_VALUE;
...
Рейтинг: 0 / 0
Вставка только уникальных записей
    #40024878
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
create or replace PROCEDURE INSERT_NEW_VALUE
(
    i_ID NUMBER,
    i_PARENT NUMBER,
    i_TYPE_OF_NODE NUMBER,
    i_CAPTION VARCHAR2,
    i_CAP VARCHAR2,
    i_PATH VARCHAR2 --,

 

) AS
BEGIN

     INSERT INTO MAIN
     (ID,              
     PARENT,           
     TYPE_OF_NODE,     
     CAPTION,          
     CAP,              
     PATH             
     )
     SELECT      i_ID,
      i_PARENT,
      i_TYPE_OF_NODE,
      i_CAPTION,
      i_CAP,
      i_PATH
     FROM DUAL
     where not EXISTS (select path from main where path = i_PATH );   
     COMMIT;
END INSERT_NEW_VALUE;



SY.
...
Рейтинг: 0 / 0
Вставка только уникальных записей
    #40024880
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это нельзя так писать

where not EXISTS (select path from main where path = i_PATH )

нет такой конструкции в операторе INSERT.

Можно на MAIN создать уникальный ключ

Код: plsql
1.
ALTER TABLE MAIN ADD UNIQUE(PATH);



а в процедуре ловить и игнорировать исключения

Код: plsql
1.
2.
EXCEPTION
  WHEN dup_val_on_index then null;
...
Рейтинг: 0 / 0
Вставка только уникальных записей
    #40024915
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mcureenab,

я думала. про уникальный ключ, но не пойдет.
админ БД не я, и таблица main уже имеет 1000 записей, и уникальный ключ по другому полю.

У меня же при вставке не должен совпадать именно path (древовидная структура)

Может до вставка выполнять выборки, искать запись = path
и если count таких записей = 0, то выполнять Insert
...
Рейтинг: 0 / 0
Вставка только уникальных записей
    #40024916
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
у думала сделать вставку в цикле , типа

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
create or replace PROCEDURE INSERT_NEW_VALUE

(
    i_ID NUMBER,
    i_PARENT NUMBER,
    i_TYPE_OF_NODE NUMBER,
     i_CAPTION VARCHAR2,
     i_CAP VARCHAR2,
     i_PATH VARCHAR2

) AS
    i Number;
BEGIN
i := 0;
for main_table in (
select  ID, PARENT, TYPE_OF_NODE ,CAPTION, CAP, PATH
FROM main
where not EXISTS (select * from main where path = i_PATH )
) loop
     INSERT INTO MAIN
     (ID,              
     PARENT,           
     TYPE_OF_NODE,     
     CAPTION,          
     CAP,              
     PATH             
     )

     VALUES (
      i_ID,
      i_PARENT,
      i_TYPE_OF_NODE,
     i_CAPTION,
      i_CAP,
      i_PATH
     );
i := i+1;
  End Loop;
  COMMIT;

END INSERT_NEW_VALUE;




но получилась хрень. Вставилось овер 100500 одинаковых записей
...
Рейтинг: 0 / 0
Вставка только уникальных записей
    #40024939
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WНаталья

но получилась хрень. Вставилось овер 100500 одинаковых записей


видать в табличке 100500 записей (for main_table in )

чем не устраивает 22243021 в однопользовательском режиме?

.....
stax
...
Рейтинг: 0 / 0
Вставка только уникальных записей
    #40024969
WНаталья
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,

Спасибо. Так работает.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вставка только уникальных записей
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]