powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проверка существования таблицы в базе?
11 сообщений из 11, страница 1 из 1
Проверка существования таблицы в базе?
    #36544489
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Не подскажете как можно проверить есть ли таблица (например: asoup.tmp_arenda) в базе данных (например: DCAN). Что-то наподобие команды TABLEEXISTS().
Мне нужно в скрипте сперва проверить есть ли в базе данная таблица если есть то работать, если нет то создать ее.
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36545241
Wiseman_And
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
if exists ( select 1 from sysibm.systables where rtrim(creator)||'.'||rtrim(name) = 'ASOUP.TMP_ARENDA' with ur )
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36547404
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wiseman_And что делает команда ... with ur?
Если уже есть такая таблица в базе то я ее сперва хочу удалить а потом создать заново, Если такой таблицы нет в базе то я ее просто создаю.
Правельно ли я пишу:
Код: plaintext
1.
2.
3.
4.
5.
6.
if exists ( select  1  from sysibm.systables where rtrim(creator)||'.'||rtrim(name) = 'ASOUP.TMP_ARENDA' with ur ) drop table ASOUP.TMP_ARENDA;

CREATE TABLE asoup.tmp_arenda
 (VAG_NUM    INTEGER         NOT NULL,
  AREN_DATEN  DATE,
  AREN_DATEK  DATE
 );
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36547534
Azeke,

Смысл тогда проверять наличие таблицы? Если ее обязательно нужно удалить?
Что мешает в таком случае просто выполнить DROP TABLE ?
Будет ненулевой код этой операции в случае если таблицы нет, или нет прав на удаление.
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36547969
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если написать просто drop, то если нет такой таблицы в базе то выходит ошибка и последующие строки команд не выполняются.
Уменя есть файл load_arend.sql которая содержит:

Код: 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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
connect to datacane user az using azz1234;

export to as.tmp.ixf of ixf
select 
       integer(aren.vagon),
	   cast(substr(char(aren.daten), 1 , 4 ) ||'-'|| substr(char(aren.daten), 5 , 2 ) ||'-'|| substr (char (aren.daten), 7 , 2 ) as date),
	   cast(substr(char(aren.datek), 1 , 4 ) ||'-'|| substr(char(aren.datek), 5 , 2 ) ||'-'|| substr (char (aren.datek), 7 , 2 ) as date)	   	   
from t_layer.dbf_arenda aren;

connect reset;

connect to MMV user db2admin using  123444 ;

drop table as.ak;
drop table as.tmp;

CREATE TABLE as.tmp
 (VG    INTEGER         NOT NULL,
  AREN_DATEN  DATE,
  AREN_DATEK  DATE
 );

CREATE TABLE AS.AK
 (VG    INTEGER         NOT NULL,
  URV        CHARACTER( 2 )    NOT NULL,
  TARA       SMALLINT        NOT NULL,
  STR        SMALLINT        NOT NULL,
  DOR        SMALLINT        NOT NULL,
  OWN_ID     INTEGER,
  AREN_ID    INTEGER,
  AREN_DATE  DATE
 );
  
import from as.tmp.ixf of ixf
insert into as.tmp;

insert into as.ak (VG, URV, TARA, STR, DOR, OWN_ID, AREN_ID, AREN_DATE)
select VG, URV, TARA, STR, DOR, OWN_ID, AREN_ID, AREN_DATE from as.akdor;

alter table AS.AKDOR
activate not logged initially with empty table;

insert into as.akdor (VG, URV, TARA, STR, DOR, OWN_ID, AREN_ID, AREN_DATE)
select vag.VG, vag.URV, vag.TARA, vag.STR, vag.DOR, vag.OWN_ID, vag.AREN_ID, aren.AREN_DATEK 
from as.ak vag
left join (Select VG, max(AREN_DATEK) AREN_DATEK from as.tmp group by VG) as aren on
	 vag.VG_NUM = aren.VG;

drop table as.ak;
drop table as.tmp;

connect reset;

Этот файл запускаю батником через командную строку по расписанию.
Если сущестует таблица то все что идет после первого drop table as.ak; не выполняется.
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36548018
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Azeke
Если сущестует таблица то все что идет после первого drop table as.ak; не выполняется.
Это влияние опции -s, которая, вообще-то, по дефолту выключена.
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36548101
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы имеете ввиду в команднике у меня нужно вмес-то:
Код: plaintext
1.
2.
cd % 1    

db2 -stvf sql\load_arend.sql >>report\load_arend.log

нужно написать :

Код: plaintext
1.
2.
3.
cd % 1    


db2 -tvf sql\load_arend.sql >>report\load_arend.log

то есть убрать s в команде db2?
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36548151
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Примерно так. Будут выполняться все.
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36548169
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да выполняется. Теперь понятно. Спасибо.
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36548281
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для not logged initially важно выключить автокоммит (опция -c- или, внутри скрипта, UPDATE COMMAND OPTIONS USING C OFF; ).
...
Рейтинг: 0 / 0
Проверка существования таблицы в базе?
    #36548302
Victor Metelitsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дропать и создавать таблицы заново в некотором смысле вредно. А именно: системный каталог заблокирован, пока не будет выполнен commit (подразумевая, что автокоммит у вас выключен). Т.е., вы создали таблицу и, не за'commit'ив, запустили что-то длительное (вроде вставки) на пару часиков... и захотели поработать в каком-нибудь Control Center ... вместо этого будете сосать лапу, ибо не увидите список таблиц. Имеет смысл потому поставить лишний commit, или вместо пересоздания чистить таблицы (not logged initially with empty table), или пользоваться global temporary.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Проверка существования таблицы в базе?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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