Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Параметер для процедуры все время в верхнем регистре. / 5 сообщений из 5, страница 1 из 1
22.11.2013, 00:52
    #38473634
webaib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметер для процедуры все время в верхнем регистре.
Нужно накатать процедуру DROP TABLE IF EXISTЫ, работает неплохо, только пока имя таблицы в верхнем регистре. Как только есть строчные, то возвращает ошибку:

Run: ADMIN.PROCEDURE1(VARCHAR(100), INTEGER)

{call ADMIN.PROCEDURE1(?,?)}
"TEST.TABLE1" is an undefined name.. SQLCODE=-204, SQLSTATE=42704, DRIVER=4.16.53
Run of routine failed.
- Roll back completed successfully.

Хотя я передаю как параметер Table1 и что самое забавное, в (SELECT 1 FROM SYSIBM.SYSTABLES WHERE NAME=TNAME...) регистр все еще правильный и запрос находит таблицу, а вот при дропе почему то все уже в верхнем регистре.


CREATE PROCEDURE PROCEDURE1 (IN TNAME VARCHAR (100), OUT res INT)
BEGIN
DECLARE sqlcode INT;
DECLARE STMT VARCHAR(1000);

SET STMT = 'DROP TABLE TEST.' || TNAME;
PREPARE S1 FROM STMT;

IF EXISTS (SELECT 1 FROM SYSIBM.SYSTABLES WHERE NAME=TNAME AND CREATOR='TEST' AND TYPE='T')
THEN
EXECUTE S1;
SET res = sqlcode;
ELSE
SET res = 100;
END IF;
END
...
Рейтинг: 0 / 0
22.11.2013, 09:42
    #38473786
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметер для процедуры все время в верхнем регистре.
webaib,

Код: plaintext
SET STMT = 'DROP TABLE TEST."' || TNAME || '"';
...
Рейтинг: 0 / 0
22.11.2013, 13:14
    #38474216
webaib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметер для процедуры все время в верхнем регистре.
Мерсите Вас ужасненько, все работает!

Только возник еще один небольшой вопрос,
в IBM Data Studio я могу спокойно выполнять SQLQuery:

CALL DROP_TABLE_IF_EXISTS ('TestMyTable', ?);

Но не понятно, как получить и использовать дальше OUT Parameter?

В SQL Explorer при том же запросе я получаю sqlcode=-313 sqlstate=07004?
...
Рейтинг: 0 / 0
22.11.2013, 18:30
    #38474799
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметер для процедуры все время в верхнем регистре.
webaibТолько возник еще один небольшой вопрос,
в IBM Data Studio я могу спокойно выполнять SQLQuery:

CALL DROP_TABLE_IF_EXISTS ('TestMyTable', ?);

Но не понятно, как получить и использовать дальше OUT Parameter?

В SQL Explorer при том же запросе я получаю sqlcode=-313 sqlstate=07004?Вы можете использовать этот параметр в вызывающей пропроцедуру программе/коде. Как именно - записит от того, откуда вызываете.
Из sql/pl можно из compound statement:
Код: sql
1.
2.
3.
4.
5.
6.
7.
set serveroutput on/

begin
  declare p_out int;
  CALL DROP_TABLE_IF_EXISTS ('TestMyTable', p_out);
  call dbms_output.put_line('par: ' || p_out);
end/



Ваш SQL Explorer надо как-то научить правильно работать с параметрами процедур, если это возможно.
...
Рейтинг: 0 / 0
25.11.2013, 11:18
    #38476307
webaib
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Параметер для процедуры все время в верхнем регистре.
Спасибо, в Java я знаю как получить этот параметер. Понял куда ковырять для SQL запроса.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Параметер для процедуры все время в верхнем регистре. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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