Гость
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Динамический SQL четвертого типа / 15 сообщений из 15, страница 1 из 1
17.08.2009, 12:38
    #36147385
MB_SQL_CM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
Для дальнейшей работы(будет использоваться неизвестное количество параметров) требуется переделать работающий запрос

PREPARE SQLSA FROM 'UPDATE NR_WORKER SET NR_WK_NAME = ? WHERE NR_WK_ID = ?' USING SQLCA;
EXECUTE SQLSA USING :sle_name.text, :nr_id;

в SQL 4 типа. К сожалению в документации не нашел ни одного примера как это делается. У меня получилось вот что:

DECLARE my_proc DYNAMIC PROCEDURE FOR SQLSA;
PREPARE SQLSA FROM 'UPDATE NR_WORKER SET NR_WK_NAME = ? WHERE NR_WK_ID = ?' USING SQLCA;
DESCRIBE SQLSA INTO SQLDA;
SetDynamicParm(SQLDA, 1, sle_name.text)
SetDynamicParm(SQLDA, 2, nr_id)
EXECUTE DYNAMIC my_proc using descriptor sqlda;

При выполнении выдает ошибку. Подскажите плз как правильно.
...
Рейтинг: 0 / 0
17.08.2009, 13:18
    #36147521
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
какая ошибка? какая субд?
...
Рейтинг: 0 / 0
17.08.2009, 14:03
    #36147688
MB_SQL_CM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
Среда PB65. СУБД MS SQL 2005. Ошибку отлавливаю: SQLCA.SQLCode = -1.
...
Рейтинг: 0 / 0
17.08.2009, 14:11
    #36147734
Dmitry..
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
a SQLCA.SQLErrorText что говорит?
...
Рейтинг: 0 / 0
17.08.2009, 14:23
    #36147791
MB_SQL_CM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
Dmitry..a SQLCA.SQLErrorText что говорит?

A SQLServer request resulted in a bad return code or status but no error message was returned
...
Рейтинг: 0 / 0
17.08.2009, 19:57
    #36148655
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
DECLARE my_proc DYNAMIC PROCEDURE CURSOR FOR SQLSA;
Про разницу почитайте в хелпе (не верю что там нет - лично видел 10 лет назад).
...
Рейтинг: 0 / 0
18.08.2009, 08:35
    #36149082
MB_SQL_CM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
Anatoly Moskovsky DECLARE my_proc DYNAMIC PROCEDURE CURSOR FOR SQLSA;
Про разницу почитайте в хелпе (не верю что там нет - лично видел 10 лет назад).

? Курсор тоже есть в четвертом типе, но он ведь применяется для пошаговой последовательной обработки записей с оператором FETCH ?
...
Рейтинг: 0 / 0
18.08.2009, 10:34
    #36149272
MB_SQL_CM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
Единственное что нашел по данному вопросу:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc37781_1150/html/psref/CCJBBCGF.htm

Тут примеры только для Cursor с Select и Procedure с хранимой процедурой без лишних комментариев. Если я правильно понял, нужной функциональностью(Update и DELETE) SQL type 4 просто не обладает.
...
Рейтинг: 0 / 0
18.08.2009, 22:14
    #36151147
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
MB_SQL_CMЕсли я правильно понял, нужной функциональностью(Update и DELETE) SQL type 4 просто не обладает.
Не правильно. Динамический SQL 4-го типа поддерживает операторы SQL (Select, Insert, Update и Delete). Сейчас не помню, по моему есть информация в книге Симона Галлагера "PowerBuider 6.0"
...
Рейтинг: 0 / 0
18.08.2009, 22:19
    #36151153
maxATC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
MB_SQL_CM
Нужно было сразу посмотреть Вашу ссылку. Так там всё четко написано, читайте внимательнее про SetDynamicParm и всё поймете.
...
Рейтинг: 0 / 0
19.08.2009, 15:40
    #36152573
MB_SQL_CM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
maxATCMB_SQL_CMЕсли я правильно понял, нужной функциональностью(Update и DELETE) SQL type 4 просто не обладает.
Не правильно. Динамический SQL 4-го типа поддерживает операторы SQL (Select, Insert, Update и Delete). Сейчас не помню, по моему есть информация в книге Симона Галлагера "PowerBuider 6.0"

Вот сейчас совсем внимательно прочитал.

PREPARE DynamicStagingArea FROM SQLStatement
{USING TransactionObject} ;

SQLStatement - A string containing a valid SQL SELECT statement

Из этой книги я сперва информацию и брал. Там еще меньше написано, возможно в оригинале и не так. Потратил кучу времени. Не могли блин сразу написать что ничего кроме Select и процедуры не может. В книге об этом вообще ни слова, а из контекста складывается впечатление что все может.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
17.05.2011, 20:15
    #37265796
griniland
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
А он и может ВСЁ!
Только не из процедуры, а из курсора.
Курсору делаешь open без фетчей - выполняется то, что ты хочешь.
...
Рейтинг: 0 / 0
05.07.2011, 21:22
    #37337987
ДГ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
Так все-таки - работает или нет динамический SQL 4 типа c SQL DML?

Пытаюсь реализовать такой алготирм:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
string sqls = "update department set name = ? where id = ?"
PREPARE SQLSA FROM :sqls using SQLCA;
DESCRIBE SQLSA INTO SQLDA ;
if SQLCA.SQLCode <>  0  then MessageBox("Error",SQLCA.SQLErrText)
SQLDA.SetDynamicParm( 1 ,  1 )
SQLDA.SetDynamicParm( 2 , "name")
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA;
OPEN DYNAMIC my_cursor USING DESCRIPTOR SQLDA;
if SQLCA.SQLCode <>  0  then MessageBox("Error",SQLCA.SQLErrText)
CLOSE my_cursor;

Выдает ошибку при вызове "OPEN DYNAMIC my_cursor":

SQLSTATE = HY000
[ODBC Firebird Driver][Firebird]Dynamic SQL Error
SQLErrorCode = -104
Token unknown - line 1, column 53
WHERE


То же происходит и при попытке использования SQL Insert:
Код: plaintext
1.
string sqls = "insert into department (id, name) values (?,?)"

Использую БД Firebird, соединение из PB через ODBC драйвер...
...
Рейтинг: 0 / 0
05.07.2011, 22:35
    #37338072
ДГ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
Вынужден сообщить, что таки да - работает!!!

Вопреки тому, что было написано выше (не пытаясь обидеть автора):
Anatoly Moskovsky DECLARE my_proc DYNAMIC PROCEDURE CURSOR FOR SQLSA;
Про разницу почитайте в хелпе (не верю что там нет - лично видел 10 лет назад).

После того, как изменил код на тот что приведен ниже, все заработало!!!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
string sqls = "update department set name = ? where id = ?"
PREPARE SQLSA FROM :sqls using SQLCA;
DESCRIBE SQLSA INTO SQLDA;
if SQLCA.SQLCode <>  0  then MessageBox("Error",SQLCA.SQLErrText)
SQLDA.SetDynamicParm( 1 , 'name')
SQLDA.SetDynamicParm( 2 ,  1 )
DECLARE my_proc DYNAMIC PROCEDURE FOR SQLSA;
EXECUTE DYNAMIC my_proc USING DESCRIPTOR SQLDA;
if SQLCA.SQLCode <>  0  then MessageBox("Error",SQLCA.SQLErrText)
CLOSE my_proc;
commit using SQLCA;

Не знаю, почему в данном случае получилось именно с динамической процедурой, хотя все пишут что это неправильно... Возможно это особенность Firebird или драйвера ODBC... Использую PB 11.5.
...
Рейтинг: 0 / 0
07.07.2011, 10:43
    #37340671
Dim2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический SQL четвертого типа
05.07.2011 23:35, ДГ пишет:

> все пишут что это неправильно...

Бессмысленное усложнение.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Динамический SQL четвертого типа / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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