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

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
FausT
Сообщения: 2
Зарегистрирован: 17 ноя 2004, 15:08

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

Сообщение FausT » 17 ноя 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
Сообщения: 1
Зарегистрирован: 24 ноя 2004, 10:28
Контактная информация:

Сообщение Danceman » 24 ноя 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
Сообщения: 2
Зарегистрирован: 17 ноя 2004, 15:08

Сообщение FausT » 24 ноя 2004, 13:41

[quote="Danceman"]SQL error code = -104
Token unknown - line 92, char 18
year
______________
В данных строках написано, что не изместно "YEAR" в 92 строке и с 18 символа, если посмотреть на 92 строку в ПРОЦЕДУРЕ, то там
year_action = year(crd)]
Спасибо, уже разобрался... именно так ошибка исправилась.

Ответить