DB2 - Как выполнить специальный запрос выбора с параметром в IBM System i Access для Windows GUI Tool - PullRequest
3 голосов
/ 25 февраля 2010

Я хотел бы выполнить некоторые специальные операторы выбора в инструменте 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?

Ответы [ 3 ]

7 голосов
/ 15 декабря 2010

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

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

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

1 голос
/ 01 марта 2010

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

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

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

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

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

0 голосов
/ 28 марта 2010

Вот несколько других альтернатив.

Средство передачи данных - Вы можете запустить Средство передачи данных iSeries из командной строки (RTOPCB). Сначала запустите версию GUI и создайте файл определения. Если вы отредактируете этот файл с помощью текстового редактора, вы увидите, что это просто старомодный 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.

...