PDA

Просмотр полной версии : Помогите исправить ошибки в SQL скрипте!!!



FausT
17.11.2004, 15:37
При загрузке скрипта в пустой базе, в InterBase 6.0, выдаёт следующую ошибку:

SQL error code = -104
Token unknown - line 92, char 18
year
Statement: ALTER PROCEDURE PUT_FORM3
(
ID_START DOUBLE PRECISION
)
RETURNS
(
IER DOUBLE PRECISION
)
AS
declare variable ID_worker NUMERIC(15);
declare variable TB_number NUMERIC(4);
declare variable korg CHAR(5);
declare variable ksotr CHAR(5);
declare variable ID_list_form NUMERIC(2);
declare variable nomer VARCHAR(8);
declare variable dataw DATE;
declare variable crd DATE;
declare variable s VARCHAR(200);
declare variable typ NUMERIC(1);
declare variable kol NUMERIC(2);
declare variable vozvr CHAR(1);
declare variable brak CHAR(1);
declare variable plat CHAR(1);
declare variable uter CHAR(1);
declare variable nom1 VARCHAR(15);
declare variable nom2 VARCHAR(15);
declare variable nom3 VARCHAR(15);
declare variable nom4 VARCHAR(15);
declare variable nom5 VARCHAR(15);
declare variable nom6 VARCHAR(15);
declare variable type_form NUMERIC(2);
declare variable ID_demand NUMERIC(15);
declare variable series VARCHAR(10);
declare variable number NUMERIC(8);
declare variable date_enter DATE;
declare variable date_distrib DATE;
declare variable date_start DATE;
declare variable date_end DATE;
declare variable sign_distance CHAR(1);
declare variable sign_pay CHAR(1);
declare variable year_action NUMERIC(4);
declare variable npers NUMERIC(1);
declare variable state_form NUMERIC(2);
declare variable ID_form NUMERIC(15);
declare variable ID_form3 NUMERIC(15);
declare variable iminus NUMERIC(1);
declare variable iser NUMERIC(1);
declare variable nom VARCHAR(15);
declare variable i NUMERIC(1);
begin
IER=0;
if(ID_start <> 0) then
ID_form = gen_id(ID_form_GEN, -1);
select TB_number from ticket_burea into :TB_number;
for select
korg, ksotr, ID_list_form, nomer, dataw, crd,
trim(s),
typ, kol, vozvr, brak, plat, uter,
trim(nom1), trim(nom2),
trim(nom3), trim(nom4),
trim(nom5), trim(nom6),
ID_form
from t_form3
where ID_form > :ID_start
into :korg, :ksotr,:ID_list_form,:nomer,:dataw,:crd,
:s,
:typ, :kol, :vozvr, :brak, :plat, :uter,
:nom1, :nom2, :nom3, :nom4, :nom5, :nom6,
:ID_form3
do
begin
ID_worker=null;
select ID_worker from worker
where TB_number=:TB_number and korg=:korg and ksotr=:ksotr
into :ID_worker;
if(ID_worker is not null) then
begin
type_form = typ;
ID_demand = null;
iser = strpos('Ê',nomer) + strpos('K',nomer);
if(iser <> 0) then
series = substr(nomer,1,iser);
else
series = null;
number = substr(nomer,iser+1,strlen(nomer));
date_enter = null;
date_distrib = dataw;
date_start = null;
date_end = crd;
sign_distance = null;
sign_pay = plat;
year_action = year(crd);
npers = kol;
if(vozvr = '1') then
state_form = 2;
else
if(uter = '1') then
state_form = 3;
else
if(brak = '1') then
state_form = 4;
else
state_form = 1;
insert into form
values(0,:ID_list_form, :type_form, :ID_demand, :ID_worker, :series,

:number,
:date_enter, :date_distrib, :date_start, :date_end,
:sign_distance, :sign_pay, :year_action, :npers, null,

:state_form, 1);
ID_form = gen_id(ID_form_GEN, 0);
insert into form3 values(:ID_form, null, null, null, :s);
i=1;
while(i<=6) do
begin
if(i=1) then nom=nom1;
if(i=2) then nom=nom2;
if(i=3) then nom=nom3;
if(i=4) then nom=nom4;
if(i=5) then nom=nom5;
if(i=6) then nom=nom6;
i=i+1;
if (nom <> '') then
begin
iser = strpos('Â',nom) + strpos('Ò',nom);
if(iser<>0) then
insert into coupon values
(:ID_form, null, :nom, null,null);
else
begin
iminus = strpos('-',:nom);
if(iminus = 0) then
insert into coupon values
(:ID_form, null, null, cast(substr(:nom,1,strlen(:nom)) as

numeric), null);
else
insert into coupon values
(:ID_form, null, null, cast(substr(:nom,1,:iminus-1) as numeric),
cast(substr(:nom,:iminus+1,strlen(:nom)) as numeric));
end
end
end
end
end
when ANY do
begin
IER=-ID_form3;
end
end
В инете находил такую ошибку, но в силу своей малой образованности в программированнии вообще, ничего пофиксить сам не смог.
А вот и сам кусок скрипта на который ругается IB:

CREATE TABLE BSK_FAIL
(
ID_BSK_FAIL ID_TABLE NOT NULL,
SER_NUM DOUBLE PRECISION,
NUM DOUBLE PRECISION NOT NULL,
ID_TYPE_BSK SMALLINT,
ID_ERROR_BSK SMALLINT,
DATE_FAIL TIMESTAMP,
ID_USER DOUBLE PRECISION,
DATE_UNLOAD TIMESTAMP,
ID_UNLOAD_USER DOUBLE PRECISION, (92 линия)
PRIMARY KEY (ID_BSK_FAIL)
);
Что интересно, таблицы он создаёт, но вот при загрузке данных появляются ошибки... видимо из-за ошибок при загрузке этого скрипта.
Буду очень признателен за помощь.

Danceman
24.11.2004, 11:22
SQL error code = -104
Token unknown - line 92, char 18
year
______________
В данных строках написано, что не изместно "YEAR" в 92 строке и с 18 символа, если посмотреть на 92 строку в ПРОЦЕДУРЕ, то там
year_action = year(crd);
, а не вторая часть кода
а эту строку нужно исправить:
year_action = extract (year from crd);
попробуй....

FausT
24.11.2004, 13:41
SQL error code = -104
Token unknown - line 92, char 18
year
______________
В данных строках написано, что не изместно "YEAR" в 92 строке и с 18 символа, если посмотреть на 92 строку в ПРОЦЕДУРЕ, то там
year_action = year(crd);
, а не вторая часть кода
а эту строку нужно исправить:
year_action = extract (year from crd);
попробуй....
Спасибо, уже разобрался... именно так ошибка исправилась.