Текущий архив: 2002.12.26;
Скачать: CL | DM;
ВнизИ снова Firebird, dialect 3 - не хочет создавать функцию Найти похожие ветки
← →
XM-AD (2002-12-05 15:57) [0]Вобщем на 5.5 работала функция, которая по наступлению некоторого события начинала делать Insert-ы и Update-ы. Так вот при вписании этой функции в скрипт создания базы получается такая фишка:
//* $$ ******** ERROR *************
//FAILED - The insert, update, delete, ddl or authorization statement cannot
// be executed because the transaction is inquiry only.
//SQL error code = -817.
//Metadata update statement is not allowed by the current database SQL dialect 3.
//
Причем в других функциях Insert-ы с Update-ами съедает нормально... :(
Что это такое и как с ним бороться?
← →
Digitman (2002-12-05 16:47) [1]приведи соотв.фрагмент скрипта
← →
XM-AD (2002-12-05 17:17) [2]CREATE PROCEDURE REG_ACTION AS BEGIN EXIT; END ^
ALTER PROCEDURE REG_ACTION (BARCODE VARCHAR(10) CHARACTER SET WIN1251, DIRECTION CHAR(1) CHARACTER SET WIN1251,ACTIONTIME DATE)
AS
declare variable PERSON_POSITION CHAR(1);
declare variable BAD_DIR INTEGER;
declare variable EXPIRY_DATE TIMESTAMP;
declare variable PASS_TYPE CHAR(1);
declare variable LAST_COME TIMESTAMP;
declare variable LAST_DATE TIMESTAMP;
declare variable ACTION_DATE TIMESTAMP;
declare variable TIME_IN TIMESTAMP;
declare variable TIME_OUT TIMESTAMP;
declare variable DOSAVE INTEGER;
declare variable REFRESHMODE INTEGER;
begin
select Person_Position, Expiry_Date, Pass_Type, Last_Come
from Pass
where Barcode=:Barcode
into :Person_Position, :Expiry_Date, :Pass_Type, :Last_Come;
if (Last_Come is Null) then Last_Come=Cast("1.1.2000" as date);
Last_Date=f_StripTime(Last_Come);
Action_Date=f_StripTime(ActionTime);
if ((Person_Position=Direction) or (Last_Date<>Action_Date))then
Bad_Dir=1;
else
Bad_Dir=0;
insert into PassLog (Barcode, Direction, Action_Time, Bad)
values (:Barcode, :Direction, :ActionTime, :Bad_Dir);
Time_IN=null;
Time_Out=Null;
dosave=0;
Bad_Dir=1;
if (Direction="O") then
begin
dosave=1;
Time_Out=ActionTime;
if (Person_Position="I") then
begin
if (Last_Date=Action_Date) then
begin
Time_IN=Last_Come;
Bad_Dir=0;
end
else
begin
Time_IN=Last_Come;
insert into passlogex(Barcode, Time_IN, Action_Date, Bad)
values (:Barcode, :Time_IN, :Last_Date, :Bad_Dir);
Last_Date=Action_Date;
Time_In=Null;
end
end
end
else
begin
if (Person_Position="I") then
begin
dosave=1;
Time_IN=Last_Come;
end
end
if (dosave=1) then
insert into passlogex(Barcode, Time_IN, Time_Out, Action_Date, Bad)
values (:Barcode, :Time_IN, :Time_Out, :Last_Date, :Bad_Dir);
if ((Pass_Type="D") and (Expiry_Date is null)) then
update Pass
set
Person_Position=:Direction,
Last_Come=:ActionTime,
Expiry_Date="today"
where Barcode=:Barcode;
else
update Pass
set
Person_Position=:Direction,
Last_Come=:ActionTime
where Barcode=:Barcode;
RefreshMode=Gen_ID(gen_refresh_mode,-RefreshMode);
when any do
RefreshMode=Gen_ID(gen_refresh_mode,-RefreshMode);
END ^
← →
Digitman (2002-12-05 17:53) [3]почему бы не сделать сразу
CREATE PROCEDURE REG_ACTION (BARCODE VARCHAR(10) CHARACTER SET WIN1251, DIRECTION CHAR(1) CHARACTER SET WIN1251,ACTIONTIME DATE)
AS ... и т.д.
Могу ошибаться, но ,как помнится, IB5.x не допускала таких "выкрутасов", когда процедура создается/модифицируется с различным рабором параметров
← →
FreeLancer (2002-12-05 18:00) [4]1. Переменные в объявлении и в теле должны выглядеть одинаково
DIRECTION - DIRECTION а не Direction
2. ACTIONTIME DATE типа DATE нет в Dialect 3
3. Ругается на что-то еще :-)
← →
FreeLancer (2002-12-05 18:03) [5]http://www.ibase.ru/migration.htm
← →
Smashich (2002-12-05 20:32) [6]То FreeLanser:
куда интересно подевался тип date из dialect 3?
Страницы: 1 вся ветка
Текущий архив: 2002.12.26;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.006 c