Subject Re: [firebird-support] Re: Script with 'Drop' in it
Author Thomas Steinmaurer
> --- In firebird-support@yahoogroups.com, "camalot_todd" wrote:
>>
>>
>>
>> --- In firebird-support@yahoogroups.com, "Leyne, Sean" wrote:
>>>
>>>
>>>>> I would like to add a script that does a "DROP EXTERNAL FUNCTION SQRT".
>>>>>
>>>>> The problem I have is that some of the databases that will run this script
>>>> already have the UDF dropped and so the script errors.
>>>>>
>>>>> Is there a way to run statements like DROP INDEX, DROP EXTERNAL
>>>> FUNCTION, etc. in a script without generating an error of the object isn't
>>>> found?
>>>>
>>>> In a pure SQL script, I wouldn't know.
>>>
>>> This should do:
>>>
>>> EXECUTE BLOCK
>>> AS
>>> BEGIN
>>> IF (EXISTS (SELECT 1 FROM RDB$Functions WHERE RDB$FunctionName = 'SQRT') ) THEN
>>> EXECUTE STATEMENT 'DROP EXTERNAL FUNCTION SQRT';
>>>
>>> END
>>>
>>>
>>>
>>> Sean
>>>
>>
>> Thanks Sean Worked great! Just had to surround the statements with SET TERM and fix the column name (RDB$FUNCTION_NAME).
>>
>> This will allow us to clean up a bunch of things in the database.
>>
>> Todd
>>
>
> We no longer have a need for UDF's because the functions we used are now part of Firebird (we have clients using 2.1 and 2.5). So it is pretty cool that I can drop all UDF's with the code below.
>
> SET TERM ^ ;
>
> EXECUTE BLOCK
>
> AS
> declare variable RDB$FUNCTION_NAME CHAR(31);
> BEGIN
> FOR SELECT RDB$FUNCTION_NAME FROM RDB$Functions WHERE RDB$FUNCTION_NAME <> 'LOWER' INTO :RDB$Function_Name
> DO
> EXECUTE STATEMENT 'DROP EXTERNAL FUNCTION '||:RDB$Function_Name;
>
> END
> ^
>
> SET TERM ; ^
>
>
> Didn't think it would work to concatenate the partial statement with a variable name to EXECUTE the drop.
>
> Anyhow I found I can't drop the UDF called LOWER. Gives me an error (Token Unknown) I believe because LOWER is now a function in Firebird.
>
> Anyone know how to drop the UDF called LOWER?

In a dialect 3 database, try with enclosing double quotes:

"LOWER"


--
With regards,
Thomas Steinmaurer
http://www.upscene.com/