Как получить необязательный параметр OUTPUT - PullRequest
1 голос
/ 19 июня 2020

У меня есть хранимая процедура Dynami c, которую я использую для выполнения нескольких запросов выбора. Я определил что-то вроде ниже.

CREATE PROCEDURE DYNAMIC                     
   (IN   IN_COLUMN1                VARCHAR(150), 
    IN   IN_COLUMN2                VARCHAR(500), 
    IN   IN_COLUMN3                VARCHAR(500), 
    IN   IN_COLUMN4                CHAR(08),     
    IN   IN_COLUMN5                DATE,     
    IN   IN_COLUMN6                CHAR(05),     
    OUT  OUT_COLUMN1               CHAR(01),     
    OUT  OUT_COLUMN2               DEC(4,0),     
    OUT  OUT_COLUMN3               DEC(4,0),     
    OUT  OUT_COLUMN4               CHAR(04), 
    OUT  OUT_COLUMN5               DATE

Проблема здесь, когда я запускаю Query1, я получу входные данные, переданные из программы COBOL DB2 в IN_COLUMN1, IN_COLUMN2, IN_COLUMN3 и OUTPUT будут извлечены в OUT_COLUMN1. Я инициализирую все INPUT в программе, из-за других параметров OUTPUT, таких как OUT_COLUMN2, OUT_COLUMN3, OUT_COLUMN4 и OUT_COLUMN5, будет null, я получаю SQLCODE "-305".

Чтобы исправить это, я попытался установить OUTPUT параметры по умолчанию, как показано ниже, и при развертывании произошла ошибка.

OUT  OUT_COLUMN2               DEC(4,0) DEFAULT NULL,

Есть ли способ справиться с этим. Я использую COBOL для вызова хранимой процедуры, запущенной в DB2.

1 Ответ

0 голосов
/ 23 июня 2020

Предполагая IBM Enterprise COBOL,

Для обработки нулевых значений в переменных хоста COBOL в SQL вам необходимо назначить «нулевой индикатор» для каждой обнуляемой переменной.

См .: Использование переменных хоста в SQL выражениях (с примерами в COBOL).

Нулевой индикатор обычно будет отрицательным, если результирующая переменная равна нулю.

По умолчанию все параметры в DB2 for z / OS Native SQL Хранимые процедуры допускают значение NULL. ( Db2 для z / OS 12.0.0 - Создание собственных SQL процедур )

Для других способов решения то, что я воспринимаю, является текущей задачей,

Пока Я думаю, что, по крайней мере, пользовательские функции DB2 могут поддерживать перегрузку функций , а хранимые процедуры - нет. Это могло быть альтернативой.

В противном случае я мог бы предложить вернуть набор результатов Dynami c из вашей хранимой процедуры? После этого вызывающая хранимая процедура должна будет обрабатывать различные конфигурации наборов результатов, что полностью выполнимо в COBOL.

Что касается перегрузки UDF:

«Схема может содержать несколько функции с одинаковыми именами, но каждая из которых имеет разное количество параметров или параметров с разными типами данных. Кроме того, функция с одинаковым именем, количеством параметров и типами параметров может существовать в нескольких схемах. "

https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/sqlref/src/tpc/db2z_functionresolution.html

Надеюсь, это помогло.

...