SQL Error 'Column XXX does not exists' running DB Procedure
Hint Ref: 021005110010
Hint Date: 11/05/2010
Hint Details:
ISSUE:
A customer was running a SQL stored procedure from their web server and periodically received the following error: 'Column 'mysite' not found'
PROBLEM:
Within the procedure the possibility of the variable 'mysite' not existing was taken care of thus:
begin
set mysite=isite
exception
when others then begin
create variable mysite char(20);
set mysite=isite
end
end;
In other words, if trying to set a value for the variable created an error (because the variable did not exist) then the exception error trap would catch this and the variable would be created before giving it a value again.
This method was necessary in Sybase 8 as there was no available function to determin if a SQL variable existed or not.
Whilst not ideal, the error trap method should still work. However, in Sybase 10 we have discovered that sometimes this approach does not work effectively and an error is still generated.
SOLUTION:
Fortunately, Sybase 10 provides for a function that can test for the existence of a SQL variable. The function is called VAREXISTS() and when passed the variable name as a string, the function returns 1 if the variable exists and 0 if it does not.
Therefore, the solution is to replace the code above with the following:
IF VAREXISTS( 'mysite' ) = 0 THEN
create variable mysite char(20);
END IF;
set mysite=isite;
For your information, the other area where this error trap method is often used is when obtaining an ID using the 'uniquekey()' function:
begin
set custid=uniquekey(isurname)
exception
when others then begin
create variable uniqueroll smallint;
set custid=uniquekey(isurname)
end
end;
commit work;
and this should be replaced with:
IF VAREXISTS( 'uniqueroll' ) = 0 THEN
create variable uniqueroll smallint;
END IF;
set custid=uniquekey(isurname);
commit work;
(Please Note: This Procedure can be destructive and should only be used by Advanced Users. RADical Systems (UK) Limited or its Partners cannot be held responsible, in anyway, for any consequence of using this or any other Database Function, Procedure or SQL command. Responsibility resides solely with the user.
IT IS HIGHLY RECOMMENDED THAT A FULL AND VALID SPACE MANAGER DATABASE BACKUP IS TAKEN AND VERIFIED AS VALID BEFORE MAKING ANY CHANGES TO THE DATABASE.)