> --- In [email protected], "camalot_todd" wrote: >> >> >> >> --- In [email protected], "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/
