powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Непонятная ошибка в SQL Anywhere 12 с Proxy Table
4 сообщений из 4, страница 1 из 1
Непонятная ошибка в SQL Anywhere 12 с Proxy Table
    #38197967
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Hi All,

SQL Anywhere 12.0.1.3840

Есть тестовый сервер SQL Anywhere 12 с двумя базами DB1 и DB2.

В DB1 создан Remote Server (RS) (с возможностью изменений) на DB2 и создана Proxy Table (PT) со ссылкой на RS.
Создаю в DB1 таблицу T1 и прописываю ей TRIGGER AFTER INSERT, UPDATE в теле которого есть такой код

Код: sql
1.
2.
3.
4.
 update dba.PT set
  F1 = dba.GetMyFunc('12'),
  F2 = '34'
 where F3 = '5


dba.GetMyFunc - это обычная UDF, внутри нее обращений к таблицам нет.

При попытке сделать insert или update для T1 получаю ошибку "Update operation attempted on non-updatable remote query" (SQLCODE -728).

Что интересно этот же update выполняется в ISQL без всяких ошибок.
Так же этот код нормально выполняется в триггере в Sybase ASA 8.0.3.

Пока нашел такой обходной путь:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
 declare c1 char(2);

 set c1 = dba.GetMyFunc('12'),

 update dba.PT set
  F1 = с1,
  F2 = '34'
 where F3 = '5'


То есть присваиваю значение dba.GetMyFunc для PT.F1 не напрямую, а через переменную.

Вопрос: Это что новая фича SQL Anywhere 12 или это его бага ?
...
Рейтинг: 0 / 0
Непонятная ошибка в SQL Anywhere 12 с Proxy Table
    #38199071
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот создал скрипты демонстрирующие эту ошибку:

DB1.sql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
CREATE TABLE "DBA"."T1" (
 "ID" INTEGER NOT NULL DEFAULT AUTOINCREMENT,
 "CSTR" CHAR(10) NULL,
 PRIMARY KEY ("ID")
)
go

CREATE FUNCTION "DBA"."GetMyFunc"(in c1 char(10), in c2 char(10))
RETURNS CHAR(20)
DETERMINISTIC
BEGIN
 DECLARE cReturn CHAR(20);
 set cReturn = c1||c2;
 RETURN cReturn;
END
go

CREATE EXISTING TABLE "DBA"."PT" AT 'RS;;DBA;T2'
go

CREATE TRIGGER "TR1" AFTER INSERT, UPDATE
ORDER 1 ON "DBA"."T1"
REFERENCING NEW AS new_f
FOR EACH ROW
BEGIN

 update dba.PT set
   DATE2 = current date,
   CSTR2 = dba.GetMyFunc(new_f.CSTR, 'X')
 where ID = 10; 

END
go

/* При выполнении этой SQL команды срабатывает trigger TR1 который вызывает ошибку 
 "Update operation attempted on non-updatable remote query (SQLCODE -728)" 
в SQL Anywhere 12.0.1.3840 и SQL Anywhere 16.0.0.1324*/
insert dba.T1(CSTR) values('C1')
go

/* Если же trigger TR1 заменить на нижеследующий, то ошибки не будет */
/*
ALTER TRIGGER "TR1" AFTER INSERT, UPDATE
ORDER 1 ON "DBA"."T1"
REFERENCING NEW AS new_f
FOR EACH ROW
BEGIN

 declare cTmp char(20);

 set cTmp = dba.GetMyFunc(new_f.CSTR, 'X');

 update dba.PT set
   DATE2 = current date,
   CSTR2 = cTmp
 where ID = 10; 

END
go

insert dba.T1(CSTR) values('C2')
go
*/

/* В Adaptive Server Anywhere 8.0.3.5594 ошибки (SQLCODE -728) нет. */


DB2.sql
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE "DBA"."T2" (
 "ID" INTEGER NOT NULL,
 "DATE2" DATE NULL,
 "CSTR2" CHAR(20) NULL,
  PRIMARY KEY ("ID")
);

insert into dba.T2(ID) values(10);
insert into dba.T2(ID) values(20);
insert into dba.T2(ID) values(30);


12.sql
Код: sql
1.
CREATE SERVER "RS" CLASS 'asaodbc' USING 'driver=SQL Anywhere 12;DBF=DB2.db';


16.sql
Код: sql
1.
CREATE SERVER "RS" CLASS 'asaodbc' USING 'driver=SQL Anywhere 16;DBF=DB2.db';


8.sql
Код: sql
1.
CREATE SERVER "RS" CLASS 'asaodbc' USING 'driver=Adaptive Server Anywhere 8.0;DBF=DB2.db';


test12.cmd
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
rem Этот скрипт выполняется для Sybase SQL Anywhere 12.0.1.3840

C:\SQLAny12\Bin32\dbinit DB1.db -z 1251CYR -p 4096
C:\SQLAny12\Bin32\dbinit DB2.db -z 1251CYR -p 4096

C:\SQLAny12\Bin32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB2.db" read DB2.sql
C:\SQLAny12\Bin32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB1.db" read 12.sql
C:\SQLAny12\Bin32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB1.db" read DB1.sql


test16.cmd
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
rem Этот скрипт выполняется для SAP SQL Anywhere 16.0.0.1324

C:\SQLAny16\Bin32\dbinit DB1.db -z 1251CYR -p 4096
C:\SQLAny16\Bin32\dbinit DB2.db -z 1251CYR -p 4096

C:\SQLAny16\Bin32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB2.db" read DB2.sql
C:\SQLAny16\Bin32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB1.db" read 16.sql
C:\SQLAny16\Bin32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB1.db" read DB1.sql


test8.cmd
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
rem Этот скрипт выполняется для Sybase Adaptive Server Anywhere 8.0.3.5594

C:\SQLAny80\Win32\dbinit DB1.db -z 1251CYR -p 4096
C:\SQLAny80\Win32\dbinit DB2.db -z 1251CYR -p 4096

C:\SQLAny80\Win32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB2.db" read DB2.sql
C:\SQLAny80\Win32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB1.db" read 8.sql
C:\SQLAny80\Win32\dbisqlc.exe -c "uid=dba;pwd=sql;dbf=DB1.db" read DB1.sql



Эти же скрипты я положил в атач.
...
Рейтинг: 0 / 0
Непонятная ошибка в SQL Anywhere 12 с Proxy Table
    #38199403
Компостеров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://search.sybase.com/kbx/changerequests?bug_id=536541

If an application attempted to update or delete from a proxy table joined with a local table, then the server may have failed an assertion, or crashed. The server will now correctly give error -728 'Update operation attempted on non-updatable remote query'.
...
Рейтинг: 0 / 0
Непонятная ошибка в SQL Anywhere 12 с Proxy Table
    #38199448
Stalker4
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компостеров http://search.sybase.com/kbx/changerequests?bug_id=536541

If an application attempted to update or delete from a proxy table joined with a local table, then the server may have failed an assertion, or crashed. The server will now correctly give error -728 'Update operation attempted on non-updatable remote query'.
ИМНО это не мой случай.

В описании ошибки говориться, что она возникает если я пытаюсь делать update или delete и в запросе у меня присутствуют локальные и прокси таблицы.

Разве в этом запросе есть локальные и прокси таблицы ?
Код: sql
1.
2.
3.
4.
update dba.PT set
   DATE2 = current date,
   CSTR2 = dba.GetMyFunc(new_f.CSTR, 'X')
 where ID = 10; 

тут только прокси таблица PT.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Непонятная ошибка в SQL Anywhere 12 с Proxy Table
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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