powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как использовать переменные в файлах SQL скриптов ?
15 сообщений из 15, страница 1 из 1
Как использовать переменные в файлах SQL скриптов ?
    #38112470
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.
Я сделал скрипт он работает нормально из БД выгружает данные в текстовый файл.
Хочу поставить этот скрипт в задание. чтобы раз в месяц он выгружал данные в текстовом виде за предыдущий месяц и соответственно в имени текстового файла добавлял месяц и год ну например вот так: co1_ГГГГММ.csv, где ГГГГ - год в формате 2012, а ММ это предыдущий месяц, например 09 - сентябрь.
Вопрос как в скрипте прописать переменные, причем даты в скрипте у меня используются по разному
t.d >= '01.09.2012' AND t.d <= '30.09.2012' или просто 09 и 2012.
Как из текущей даты посадить в какие-то переменные день, месяц и год и затем как эти переменные использовать в SQL запросе.
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38113621
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Azeke,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
--#SET TERMINATOR @
BEGIN
  DECLARE CDAY INTEGER;
  DECLARE CMONTH INTEGER;
  DECLARE CYEAR INTEGER;

  SET CDAY     = DAY(CURRENT DATE);
  SET CMONTH = MONTH(CURRENT DATE);
  SET CYEAR    = YEAR(CURRENT DATE);

  ...
END@
--#SET TERMINATOR ;



Большой минус - оно ошибки не будет выдавать построчно, а будет выполнять как один compound statement.

Альтернатива - использовать появившиеся в 9.7 (или ранее? ну, в общем, в 9-ке) глобальные переменные - CREATE VARIABLE statement .
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38132338
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я извиняюсь, для наглядности можно ссылку на ресурс с примерами скриптов (не хранимых процедур).
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38132579
m72
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m72
Гость
AzekeПривет.
Как из текущей даты посадить в какие-то переменные день, месяц и год и затем как эти переменные использовать в SQL запросе.

использовать как и любые переменные
>tbid=11
>db2 -x "select tbsp_state from SYSIBMADM.SNAPTBSP_PART where TBSP_ID = $tbid" | read tbstate
>echo $tbstate
NORMAL

для переменной с датой без времени будет что-нибудь типа
dt=$(date +%F...)
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38133586
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azeke,

DB2 Basics: Getting to know the DB2 UDB command line processor
Command line processor (CLP)
С параметрами дело обстоит немного сложнее - вы не можете стандартными средствами передать в скрипт параметр.
Максимум, что вы можете, это использовать в скрипте "сложную" команду (BEGIN ... END@), где можно завести и использовать переменные, как показано выше в примере.
Но внутри этой сложной команды вы не сможете вызывать напрямую CLP commands , хотя к некоторым из них есть SQL интерфейс - см. описание процедуры ADMIN_CMD .
В вашем случае, если вы запускаете скрипт не на сервере, то вы не сможете использовать ADMIN_CMD для EXPORT, т.к. ADMIN_CMD выгрузит файл на сервер, что может быть неудобно.

Выход может быть таким - использовать файл параметров и утилиту контекстной замены (например, sed).
Пишете небольшой командный файл (для unix он, конечно, будет свой):
db2_my.bat
Код: 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.
@echo off

SETLOCAL EnableDelayedExpansion
setlocal 

if .%1.==.. goto usage
if .%2.==.. set parmfile=parms.txt
if NOT EXIST %1 goto noscript
if NOT EXIST %parmfile% goto noparms

set comm=
for /F %%n in (%parmfile%) do set comm=!comm! -e "s/%%n/g"
rem echo %comm%

sed %comm% %1 | db2 +p -t -v -z %1.log

endlocal
goto :eof

:usage
@echo usage: %~n0 db2_script_file [ parameter_file ]
goto :eof

:noscript
@echo error: no db2_script_file
goto :eof

:noparms
@echo error: no parameter_file
goto :eof

Файл параметров: parms.txt
Код: plaintext
1.
&p1&/201301    
&p2&/2013-01-01

script.sql
Код: plaintext
1.
2.
3.
export to co1_&p1&.csv of del
select tabschema, tabname
from syscat.tables 
where lastused > date('&p2&');

Вызов:
Код: plaintext
db2_my script.sql parms.txt
При желании формирование файла параметров можно тоже автоматизировать:
get_parms.sql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
select 
case p.i
  when 1 then '&p1&/'||digits(dec(year(d), 4))||digits(dec(month(d), 2))
  when 2 then '&p2&/'||char(d, iso)
end
from 
  table(values current date - 1 month) t(d)
, table(values 1, 2) p(i);

Код: plaintext
db2 -xtf get_parms.sql -r parms.txt
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38149435
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein попробовал сделать как вы сказали, не работает выдает ошибку (приложил скриншот). Я не силен в командной строке, не до конца понял ваш скрипты, просто скопировал, может быть где-то надо было переписать под себя. Свои скрипты приложил во вложении.
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38149697
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AzekeMark Barinstein попробовал сделать как вы сказали, не работает выдает ошибку (приложил скриншот).
Прошу прощения, пропустил строку.
Надо:

Код: plaintext
1.
2.
3.
4.
...
if .%1.==.. goto usage
set parmfile=%2
if .%2.==.. set parmfile=parms.txt
...

Запускать надо из db2cw, а не из cmd.
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38149905
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сделал, теперь выходит другая ошибка. Ругается на команду set. Скриншот во вложении.
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38149957
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AzekeСделал, теперь выходит другая ошибка. Ругается на команду set. Скриншот во вложении.Оно ругается на sed .
Её нет в windows, но вы можете скачать её порт для windows, например, отсюда .
exe из Binaries zip file + библиотеки поддержки из dependencies zip file.
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38179351
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте Mark Barinstein.
Скачал файлы как вы указали, но я с таким ПО сталкиваюсь в первые, не понял как его установить.
В интернете то, что нашел по установке здесь , вообще не понятно.
Не могли бы вы написать как его установить или указать ссылку где более понятно описана установка и ее использование.
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38180070
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azeke,

Их не надо устанавливать.
Вы просто раскрываете файлы из этих архивов:
sed
dependencies

после чего делаете так, чтоб эти файлы были у вас либо в текущем каталоге, либо в %PATH%:
Код: plaintext
1.
2.
3.
libiconv2.dll 
libintl3.dll 
regex2.dll 
sed.exe 
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38181235
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,
Сделал как вы написали. Посадил фсе файлы в папку с моим приложением. Теперь sed вроде работает, но выходит другая ошибка.
Скриншот во вложении.
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38181557
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azeke,

Трудно сказать, что это может быть.
Попробуйте разбить эту команду:
Код: plaintext
sed %comm% %1 | db2 +p -t -v -z %1.log
на 2:
Код: plaintext
1.
sed %comm% %1 > %1.tmp
db2 -tvf %1.tmp -z %1.log
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38182456
Azeke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mark Barinstein,
Сделал. Теперь создается файл script.sql.tmp. Но дальше выходит ошибка: Произошла ошибка доступа к файлу script.sql.log
Во вложении скриншот ошибки и содержимое файла script.sql.tmp.
В файле script.sql.tmp видно что даты заменились как надо
...
Рейтинг: 0 / 0
Как использовать переменные в файлах SQL скриптов ?
    #38182574
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Azeke,

Похоже, что какая-то лажа именно с этой реализацией sed.
Я пользуюсь sed от cygwin , но его надо устанавливать...
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Как использовать переменные в файлах SQL скриптов ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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