Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Oracle > Запрос для Oracle.


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

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

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


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

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

Заранее благодарен.

Автор: Marriage 21.6.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;

Может ошибки и есть, но смысл я думаю понятен ...

Автор: Kesh 21.6.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);

Автор: Marriage 21.6.2004, 22:10
2kesh
Красиво замутил ... notify.gif

Автор: <Spawn> 22.6.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?

Автор: Romski 22.6.2004, 15:00
Так у меня не article уникальный, а barcobe. Хм, всем спасибо, думаю, что какой нить из вариантов сработат...ж))

Автор: Kesh 22.6.2004, 22:53
Давай, напиши уж, что получилось...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)