powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Обновление таблицы из mdb
10 сообщений из 10, страница 1 из 1
Обновление таблицы из mdb
    #35760012
L0gica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброе время суток.

C DB2 почти не работал.
Не могу решить следующую задачу.
Есть таблица:
CREATE TABLE "SHL "."NSTOCK" (
"ID" INTEGER NOT NULL ,
"GROUPID" INTEGER NOT NULL ,
"CATALOGNO" CHAR(24) NOT NULL ,
"CATALOGMOPAR" CHAR(24) WITH DEFAULT ,
"NAMER" CHAR(100) WITH DEFAULT ,
"NAMEA" CHAR(100) WITH DEFAULT ,
"SALE" DOUBLE WITH DEFAULT ,
"MODEL" CHAR(5) NOT NULL WITH DEFAULT ,
"ISCONST" CHAR(1) NOT NULL ,
"WARRANTYTYPE" SMALLINT ,
"WARRANTY" INTEGER ,
"SELFCOST" DOUBLE WITH DEFAULT ,
"HASIMAGE1" INTEGER WITH DEFAULT ,
"HASIMAGE2" INTEGER WITH DEFAULT ,
"HASDESC" INTEGER WITH DEFAULT ,
"VES" DOUBLE WITH DEFAULT ,
"NU" INTEGER WITH DEFAULT ,
"HANDCOST" CHAR(1) NOT NULL WITH DEFAULT 'N' ,
"COUNTRYCOUNT" INTEGER WITH DEFAULT ,
"SSLCNT" INTEGER WITH DEFAULT ,
"STIMCNT" INTEGER WITH DEFAULT ,
"MAKERID" INTEGER ,
"ANCNT" INTEGER WITH DEFAULT ,
"CCID" INTEGER )
IN "USERSPACE1" ;

CREATE INDEX "SHL "."NS_GID" ON "SHL "."NSTOCK"
("GROUPID" ASC,
"ID" ASC)
DISALLOW REVERSE SCANS;


CREATE INDEX "SHL "."NST_C_D" ON "SHL "."NSTOCK"
("CATALOGNO" DESC)
DISALLOW REVERSE SCANS;

CREATE INDEX "SHL "."NSTGSI" ON "SHL "."NSTOCK"
("GROUPID" ASC,
"SALE" ASC,
"ID" ASC)
DISALLOW REVERSE SCANS;

CREATE INDEX "SHL "."NSTIDD" ON "SHL "."NSTOCK"
("ID" DESC)
DISALLOW REVERSE SCANS;

CREATE UNIQUE INDEX "SHL "."NSTOCKBYCATALOG" ON "SHL "."NSTOCK"
("CATALOGNO" ASC)
DISALLOW REVERSE SCANS;

CREATE INDEX "SHL "."NSTOCKBYGROUPS" ON "SHL "."NSTOCK"
("GROUPID" ASC)
DISALLOW REVERSE SCANS;

ALTER TABLE "SHL "."NSTOCK"
ADD PRIMARY KEY
("ID");

Необходимо обновить поля GROUPID, SALE и SELFCOST по полю CATALOGNO из mdb.
Притом в mdb есть записи которых нет в таблице NSTOCK.

1. Пытаюсь сделать это с помощь LOAD, но не знаю как указать, чтобы данные обновлялись по полю CATALOGNO.
2. Не знаю как выполнить это из php. Я так понимаю что надо делать это через CLP, но положительного результата так и не добился
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35760014
L0gica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
из mdb генерирую предварительно файл:
000010006 33 33 0.83 1.57
000010006E 33 33 21.61 41.05
000010007F 33 33 44.92 85.35
000010018C 33 33 85.38 162.23
000010230A 33 33 61.87 117.55
000097059B 26 33 488.89 958.22
000098650 29 29 371.39 724.22
000098651 29 29 371.39 724.22
...
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35760862
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Создаете таблицу для загрузки из файла (1 раз, дальше можно её постоянно использовать):
Код: plaintext
1.
2.
3.
4.
5.
create table shl.mdb_tmp (
"GROUPID" INTEGER NOT NULL ,
"CATALOGNO" CHAR( 24 ) NOT NULL ,
"SALE" DOUBLE WITH DEFAULT ,
"SELFCOST" DOUBLE WITH DEFAULT
) in userspace1;
1. Кладёте файл mdb.txt на сервер. Используйте в качестве разделителя полей в нём какой-нибудь другой символ вместо пробела (например |).
2.
Код: plaintext
CALL ADMIN_CMD('load from full_path\mdb.txt of del modified by coldel| method p(1,3,4,5) replace into shl.mdb_tmp(CATALOGNO, GROUPID, SALE, SELFCOST) nonrecoverable')
3.
Код: plaintext
1.
MERGE INTO "SHL "."NSTOCK" B USING shl.mdb_tmp T ON B.CATALOGNO=T.CATALOGNO
WHEN MATCHED THEN UPDATE SET (GROUPID, SALE, SELFCOST)=(T.GROUPID, T.SALE, T.SELFCOST)
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35761595
L0gica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В файле [TAB], просто так скопировалось.

Возможно я что-то не правильно понимаю.
пробовал запросы:
1. CALL ADMIN_CMD('load from full_path\mdb.txt of del modified by coldel0x09 method p(2, 3, 4, 5, 6, 7, 1) replace into shl.mdb_tmp(CATALOGNO, NEWGROUPID, OLDGROUPID, COST1, COST2, COST3, STOCKID) nonrecoverable')

2. LOAD CLIENT FROM "Z:\home\sitevw.ru\www\dataInNstock.ls" OF DEL MODIFIED BY COLDEL0x09 METHOD P (2, 3, 4, 5, 6, 7, 1) MESSAGES "Z:\home\sitevw.ru\www\price\log.ls" REPLACE INTO SHL.LOADPRICE (CATALOGNO, NEWGROUPID, OLDGROUPID, COST1, COST2, COST3, STOCKID) NONRECOVERABLE

3. CALL ADMIN_CMD('LOAD CLIENT FROM "Z:\home\sitevw.ru\www\dataInNstock.ls" OF DEL MODIFIED BY COLDEL0x09 METHOD P (2, 3, 4, 5, 6, 7, 1) MESSAGES "Z:\home\sitevw.ru\www\price\log.ls" REPLACE INTO SHL.LOADPRICE (CATALOGNO, NEWGROUPID, OLDGROUPID, COST1, COST2, COST3, STOCKID) NONRECOVERABLE')

запрос выполняю с помощью $stmt = db2_exec($connDB2, $sql) в PHP, но результат:
Warning: db2_exec() [function.db2-exec]: Statement Execute Failed in Z:\home\sitevw.ru\www\load.php on line 9


и возможно ли обновлять данные сразу в двух таблицах:

CREATE TABLE "SHL"."STOCKCOST" (
"STOCKID" INTEGER NOT NULL ,
"CUSTCLASSID" SMALLINT NOT NULL ,
"COST1" DOUBLE WITH DEFAULT ,
"COST2" DOUBLE WITH DEFAULT ,
"COST3" DOUBLE WITH DEFAULT ,
"COST4" DOUBLE WITH DEFAULT ,
"COST5" DOUBLE WITH DEFAULT )
IN "USERSPACE1" ;
и указанную ранее
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35761800
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L0gicaВозможно я что-то не правильно понимаю.
пробовал запросы:...
Какой результат выполнения первых 2-х команд?
3-я не будет работать, т.к. хранимая процедура не может работать с файлами на клиенте и предложение messages - не правильное.
LOAD command using the ADMIN_CMD procedure .
Т.е. если вы захотите с локальной машины грузить файлы, то это можно делать из командной строки клиента, а не хранимой процедурой.
L0gicaи возможно ли обновлять данные сразу в двух таблицах:

CREATE TABLE "SHL"."STOCKCOST" (
"STOCKID" INTEGER NOT NULL ,
"CUSTCLASSID" SMALLINT NOT NULL ,
"COST1" DOUBLE WITH DEFAULT ,
"COST2" DOUBLE WITH DEFAULT ,
"COST3" DOUBLE WITH DEFAULT ,
"COST4" DOUBLE WITH DEFAULT ,
"COST5" DOUBLE WITH DEFAULT )
IN "USERSPACE1" ;
и указанную ранееЕсли я правильно понял вопрос, то ничто не мешает использовать однажды прогруженную временную таблицу SHL.LOADPRICE несколько раз.
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35762007
L0gica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?php
include($HTTP_SERVER_VARS['DOCUMENT_ROOT']."/include/db2.inc.php");

$connDB2 = connectDB2('CMS');

$sql = "CALL ADMIN_CMD('LOAD FROM \"C:\LoadPrice\dataInNstock.ls\" OF DEL MODIFIED BY COLDEL0x09 METHOD P (2, 3, 4, 5, 6, 7, 1) REPLACE INTO SHL.LOADPRICE (CATALOGNO, NEWGROUPID, OLDGROUPID, COST1, COST2, COST3, STOCKID) NONRECOVERABLE')";
$stmt = db2_exec($connDB2, $sql);
db2_free_stmt($stmt);
closeBB2($connDB2);
?>

результат:
Warning: db2_exec() [function.db2-exec]: Statement Execute Failed in Z:\home\sitevw.ru\www\load.php on line 7


а другой вопрос был про возможность в одном запросе обновлять данные в двух таблицах:
GROUPID и SALE по CATALOGNO
Код: plaintext
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.
CREATE TABLE "SHL "."NSTOCK" (
"ID" INTEGER NOT NULL , 
"GROUPID" INTEGER NOT NULL , 
"CATALOGNO" CHAR( 24 ) NOT NULL , 
"CATALOGMOPAR" CHAR( 24 ) WITH DEFAULT , 
"NAMER" CHAR( 100 ) WITH DEFAULT , 
"NAMEA" CHAR( 100 ) WITH DEFAULT , 
"SALE" DOUBLE WITH DEFAULT , 
"MODEL" CHAR( 5 ) NOT NULL WITH DEFAULT , 
"ISCONST" CHAR( 1 ) NOT NULL , 
"WARRANTYTYPE" SMALLINT , 
"WARRANTY" INTEGER , 
"SELFCOST" DOUBLE WITH DEFAULT , 
"HASIMAGE1" INTEGER WITH DEFAULT , 
"HASIMAGE2" INTEGER WITH DEFAULT , 
"HASDESC" INTEGER WITH DEFAULT , 
"VES" DOUBLE WITH DEFAULT , 
"NU" INTEGER WITH DEFAULT , 
"HANDCOST" CHAR( 1 ) NOT NULL WITH DEFAULT 'N' , 
"COUNTRYCOUNT" INTEGER WITH DEFAULT , 
"SSLCNT" INTEGER WITH DEFAULT , 
"STIMCNT" INTEGER WITH DEFAULT , 
"MAKERID" INTEGER , 
"ANCNT" INTEGER WITH DEFAULT , 
"CCID" INTEGER ) 
IN "USERSPACE1" ; 

и

COST1, по STOCKID
для CUSTCLASSID = 1 COST1 = COST1
для CUSTCLASSID = 2 COST1 = COST2
для CUSTCLASSID = 3 COST1 = COST3

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE TABLE "SHL"."STOCKCOST" (
"STOCKID" INTEGER NOT NULL , 
"CUSTCLASSID" SMALLINT NOT NULL , 
"COST1" DOUBLE WITH DEFAULT , 
"COST2" DOUBLE WITH DEFAULT , 
"COST3" DOUBLE WITH DEFAULT , 
"COST4" DOUBLE WITH DEFAULT , 
"COST5" DOUBLE WITH DEFAULT ) 
IN "USERSPACE1" ; 

исходный файл чуть изменился:
STOCKID___CATALOGNO____OLDGROUPID_NEWGROUPID__COST1_____COST2______COST3130015____000300043 X____33_________33___________171729.06__326285.21___188901.96130016____000300043A_____33_________33___________71729.06___326285.21___188901.96130017____000300043AX____33_________33___________171729.06__326285.21___188901.96130018____000300043BX____33_________33___________171729.06__326285.21___188901.96

[TAB] заменил на _ для корректного отображения здесь
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35762106
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
L0gica,

Вы можете на сервере из db2cmd выполнить 2 команды:
Код: plaintext
1.
2.
db2 connect to your_db_name user ... using ...

db2 CALL ADMIN_CMD('LOAD FROM C:\LoadPrice\dataInNstock.ls OF DEL MODIFIED BY COLDEL0x09 METHOD P (2, 3, 4, 5, 6, 7, 1) REPLACE INTO SHL.LOADPRICE (CATALOGNO, NEWGROUPID, OLDGROUPID, COST1, COST2, COST3, STOCKID) NONRECOVERABLE')
?
Что вернет последняя команда?
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35762155
L0gica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
тоже самое, что и при выполнении через центр управления:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
  Набор результатов 1
  --------------

  ROWS_READ            ROWS_SKIPPED         ROWS_LOADED          ROWS_REJECTED        ROWS_DELETED         ROWS_COMMITTED       ROWS_PARTITIONED     NUM_AGENTINFO_ENTRIES MSG_RETRIEVAL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    MSG_REMOVAL                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     
  -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                398024                    0               398024                    0                    0               398024                    -                     - -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  1 записей выбрано.

  Статус возврата = 0
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35764385
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня с db2 v9.1.6a и

>php -v
PHP 5.2.6 (cli) (built: May 2 2008 18:02:07)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?php
$database = 'sample';
$user = '***';
$password = '***';
$conn = db2_connect($database, $user, $password);
if ($conn) {
   $sql = "CALL ADMIN_CMD('load from \"full_path\mdb.txt\" of del modified by coldel| method p(1,3,4,5) replace into shl.mdb_tmp(CATALOGNO, GROUPID, SALE, SELFCOST) nonrecoverable')";
   if (!db2_exec($conn, $sql))
     printf("Load failed.\n%s\n", db2_conn_errormsg());
   db2_close($conn);
}
else {
   printf("Connection failed.\n%s\n", db2_conn_errormsg());
}
?>
нормально грузит файл в таблицу.
...
Рейтинг: 0 / 0
Обновление таблицы из mdb
    #35764519
L0gica
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<?php
include($HTTP_SERVER_VARS['DOCUMENT_ROOT']."/include/db2.inc.php");

$connDB2 = connectDB2('CMS');

if ($connDB2) {
	$sql = "CALL ADMIN_CMD('LOAD FROM \"C:\LoadPrice\dataInNstock.ls\" OF DEL MODIFIED BY COLDEL0x09 METHOD P (2, 3, 4, 5, 6, 7, 1) REPLACE INTO SHL.LOADPRICE (CATALOGNO, NEWGROUPID, OLDGROUPID, COST1, COST2, COST3, STOCKID) NONRECOVERABLE')";
	if (!db2_exec($connDB2, $sql)) {
		printf("Load failed.\n%s\n", db2_conn_errormsg());
		db2_close($connDB2);
	}
} else {
	printf("Connection failed.\n%s\n", db2_conn_errormsg());
}
?>

Код: plaintext
1.
Warning: db2_exec() [function.db2-exec]: Statement Execute Failed in Z:\home\sitevw.ru\www\load.php on line 8
Load failed.

У меня скрипт выполняется не на сервере с db2
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Обновление таблицы из mdb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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