Запрос для Oracle.

 
0
 
Oracle
ava
Romski | 21.06.2004, 20:31
Приветы. Хотел спросить помощи. Существует таблица A, в которой имеются два поля, говоря точно, это barcode и article. Уникальным является barcode. Предположим, что существует такая строка:

article | barcode |
--------------------------------- |
11111 | 111111111111 |
22222 | 2222222222222 |

Заметьте, что в первой строке баркод является 12 значным. И на самом деле, таких 12 значных баркодов в реальной таблице очень много, руками переделывать можно устать...ж)) Быть может кто-то поможет мне и предоставит скрипт, который будет отыскивать 12 значные баркоды и добавлять ещё одну строку с таким же артиклем, но уже 13 значным баркодом. Как то не грамотно всё описал, суть в том, что после запуска скрипта должно будет быть следующее:


article | barcode |
--------------------------------- |
11111 | 0111111111111 |
11111 | 111111111111 |
22222 | 2222222222222 |

т.е не изменять текущий баркод, а добавлять строку с тем же артикулом и почти таким же баркодом, к которому впереди будет добавляться ноль, до 13 знаков.

Заранее благодарен.
Comments (6)
ava
Marriage | 21.06.2004, 21:39 #
Долго не думал ...
Я бы сделал ( на Дельфе ) следущим образом :

Ods - OracleDataSet : Select * from A
OracleQuery - insert into A( article, barcode ) values (:article, : barcode );





Ods.Open;
Ods.First;

While not Ods.EOF do
Begin

str:=Ods.FieldByName('Barcode').AsString;

If length(str) = 12 then
Begin
str:='0' + str;
OracleQuery.SetVariable('Barcode',str);
OracleQuery.SetVariable('Article',Ods.FieldByName('article').AsString);
OracleQuery.Execute;
End;

ODS.NEXT;

End;

Может ошибки и есть, но смысл я думаю понятен ...
ava
Kesh | 21.06.2004, 22:04 #
А может как-нить так.... Могут быть ошибки... На Oracle не проверял...

SQL
INSERT INTO style='color:orange'><TABLE> (ARTICLE,BARCODE) VALUES (SELECT ARTICLE, '0'||BARCODE FROM style='color:orange'><TABLE> WHERE LENGTH(BARCODE)=12);
ava
Marriage | 21.06.2004, 22:10 #
2kesh
Красиво замутил ... :notify
ava
&lt;Spawn&gt; | 22.06.2004, 08:20 #
Примерно так(могут быть ошибки так как пишу по памяти)
declare
 cursor c_barcodes is
   (SELECT article, barcode
      FROM A
     WHERE Length(rtrim(ltrim(barcode))) = 12);
begin
 for v_rec in c_barcodes loop
   INSERT INTO A (article, barcode)
     VALUES (v_rec.article, '0'||v_rec.barcode);
 end loop;
commit;
end;


П.С. Только как ты такое хочешь сделать, если у тебя уникальный article?
ava
Romski | 22.06.2004, 15:00 #
Так у меня не article уникальный, а barcobe. Хм, всем спасибо, думаю, что какой нить из вариантов сработат...ж))
ava
Kesh | 22.06.2004, 22:53 #
Давай, напиши уж, что получилось...
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
advanced
Submit