У меня есть чрезвычайно простая хранимая процедура для поиска таблиц в конкретной схеме на основе параметров моей схемы и таблицы.Сохраненная процедура DB2 Возвращение Слишком много строк
Проблема заключается в том, что хранимая процедура возвращает ВСЕ строки для таблицы.
- Он игнорирует мой второй параметр (имя_таблицы)
- Я орфографическую ошибку параметр имя_таблицы и процедура возвращает все строки.
- Если я пропущу параметр схемы, он не вернет никаких строк.
Любые идеи? Заранее спасибо. Сохраненная процедура приведена ниже.
CREATE OR REPLACE PROCEDURE FINDTABLECOLUMNS
(IN SCHEMA VARCHAR(25), IN TABLE_NAME VARCHAR(25))
LANGUAGE SQL
READS SQL DATA
RESULT SETS 1
BEGIN
DECLARE COLUMN_TABLE_LIST CURSOR WITH RETURN TO CALLER FOR
SELECT
ROW_NUMBER () OVER (ORDER BY TABLE_NAME , ORDINAL_POSITION) AS #
,TABLE_NAME
,COLUMN_NAME
,SYSTEM_COLUMN_NAME
,DATA_TYPE
,LENGTH
,COLUMN_TEXT
FROM QSYS2 . SYSCOLUMNS
WHERE TABLE_SCHEMA = UPPER (SCHEMA) AND TABLE_NAME = UPPER (TABLE_NAME)
FOR READ ONLY ;
OPEN COLUMN_TABLE_LIST ;
END
Нужно ли вам ROW_NUMBER(), если у вас уже есть ORDINAL_POSITION? SCALE часто бывает удобнее в таких запросах, для количества десятичных знаков на (упакованных) десятичных или (зональных) числовых столбцах. – WarrenT
Необходимо учитывать пределы объекта: схема - это varchar (128), то же самое, что и имя_таблицы. Кроме того, если схема меньше 8 символов, она добавит дополнительные пробелы для соответствия. Это в LUW, я не знаю других платформ. – AngocA
http://angocadb2.blogspot.com/2015/07/esquemas-y-nombres-de-usuario-en-el.html – AngocA