DB2 — Как запустить специальный запрос выбора с параметром в инструменте графического интерфейса IBM System i Access для Windows

StackOverflow https://stackoverflow.com/questions/2336820

Вопрос

Я хотел бы запустить несколько специальных операторов выбора в инструменте IBM System I Navigator для DB2, используя объявленную мной переменную.

Например, в мире SQL Server я бы легко сделал это в окне запроса SQL Server Management Studio следующим образом:

DECLARE @VariableName varchar(50);
SET @VariableName = 'blah blah';

select * from TableName where Column = @VariableName;

Как я могу сделать что-то подобное в инструменте IBM System I Navigator?

Это было полезно?

Решение

Я наткнулся на этот пост, когда искал тот же вопрос.Мой коллега дал ответ.Действительно, в Navigator можно объявлять переменные в специальном операторе SQL.Вот как это делается:

CREATE OR REPLACE VARIABLE variableName VARCHAR(50);
SET variableName = 'blah';
SELECT * FROM table WHERE column = variableName;
DROP VARIABLE variableName;

Если вы не удалите имя переменной, она будет висеть там, пока кто знает, когда...

Другие советы

В данный момент мы работаем над этим же вопросом на работе.К сожалению, мы пришли к выводу, что это невозможно.Согласен, было бы здорово, но так не бывает.iNavigator не поддерживает SET или Define.Вы можете сделать это во встроенном SQL, но это не встроенный SQL.Даже если вы создаете отдельный документ (xxx.sql), то для запуска скрипта необходимо открыть этот документ, что делает его интерактивным скриптом (т. е. DECLARE SECTION не допускается).

В качестве альтернативы на экране/скрипте SQL вы можете использовать КЛ:.Все, что следует за этим префиксом, выполняется как команда CL.Вы можете манипулировать своими таблицами (например.RNMF) таким образом.

В качестве второй альтернативы iSeries поддерживает сценарии Rexx (по умолчанию устанавливаются вместе с операционной системой).Rexx — хороший язык динамических сценариев, поддерживающий встроенный SQL.Я делал это много раз, и это отлично работает.Я даже создавал сценарии для нашей производственной среды.

Просто создайте один сценарий «по умолчанию» с примером инструкции PREPARE и CURSOR и скопируйте его по своему усмотрению.С этим сценарием вы можете поиграть.См. руководство Rexx для правильного синтаксиса exec-sql.Кроме того, у вас есть STDIN и STDOUT, но вы можете использовать OVRDBF, чтобы указать на таблицу базы данных (физический файл).Просто дайте мне знать, если вам нужен пример сценария Rexx.

Обратите внимание, что в руководстве «Программирование встроенных SQL» есть примеры Rexx.

Вот еще пара альтернатив.

Средство передачи данных. Средство передачи данных iSeries можно запустить из командной строки (RTOPCB).Сначала запустите версию с графическим интерфейсом и создайте файл определений.Если вы отредактируете этот файл в текстовом редакторе, то увидите, что это всего лишь старомодный INI-файл и в нем легко найти строку с запросом.Отсюда вы можете написать пакетный файл или иным образом предварительно обработать текстовый файл, чтобы можно было манипулировать запросом перед его отправкой в ​​инструмент запросов.

QSHELL. Если вы можете войти в систему iSeries в интерактивном режиме, то среда QSHELL может показаться вам более знакомой, чем CL или REXX (хотя REXX — это довольно весело).QSHELL — это полная среда POSIX, работающая на iSeries.Используйте команду STRQSH для запуска QSHELL.В качестве оболочки вы можете использовать ksh или csh.Внутри QSHELL есть команда «db2», которая отправляет запросы.Итак, вы сможете сделать что-то подобное внутри QSHELL:

system> VariableName = 'blah blah'
system> db2 "select * from TableName where Column = \'$VariableName\'"

Возможно, вам придется повозиться с кавычками, чтобы ksh правильно их передавал.

Кроме того, внутри QSHELL у вас должна быть полная установка Perl, которая позволит вам использовать DBI для получения данных.

Некоторые другие способы взаимодействия с данными в iSeries:запрос от клиента с Python через ODBC;запрос от клиента с Jython через JDBC;установите Jython непосредственно на iSeries, а затем выполните запрос через JDBC.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top