Internal Function is in principe gewoon een StoredProc, maar dan met 1 resultaat.
Indien geen input-parameter, dan aanroepen met gesloten haakjes ()
Dus deze roep je (in PSQL) bijv. aan met: if FCheckIfAllowedCustomer(1) then
SQL Code:
CREATE OR ALTER FUNCTION FCHECKIFALLOWEDCUSTOMER(
nID Integer)
returns BOOLEAN
AS
declare variable nCounter Integer;
begin
SELECT Count(ID) FROM Customers
WHERE ID = :nID AND IsAllowedForEdit=True
INTO :nCounter;
IF (:nCounter = 0) then
RETURN False;
else
RETURN True;
end
Deze roep je (in PSQL) aan met: BooleanVariable = FCheckIfRunningAbo(); (of if FCHeckIfRunningAbo() then)
SQL Code:
CREATE OR ALTER FUNCTION FCHECKIFRUNNINGABO
returns BOOLEAN
AS
declare variable DDATUM date;
begin
execute statement 'select BeeindigdPerDatum from Customers where ID = 1'
ON external DATA source 'MyDatabaseserver:MyDatabase'
AS user 'username' password 'password'
INTO :dDatum;
IF (:dDatum IS NOT NULL) then
RETURN False;
else
RETURN True;
end
In Delphi: FDStoredProc of FDQuery-component in Datamodule, laten verwijzen naar aangemaakte InternalFunction (daarom beginnen deze bij mij in de naam altijd met F)
Vervolgens standaard opvragen:
Delphi Code:
ProjectsDataModule.FDStoredProc1.ParamByName('nID').Value := 1;
ProjectsDataModule.FDStoredProc1.ExecProc;
Showmessage(ProjectsDataModule.FDStoredProc1.ParamByName('Result').AsString);
En deze InternalFunction is gedefinieerd als:
SQL Code:
CREATE OR ALTER FUNCTION Fname(nid integer)
returns varchar(100)
AS
declare variable Result varchar(100);
begin
SELECT firstname FROM users WHERE id = :nID INTO :Result;
RETURN :Result;
end
Maar deze InternalFunctions kun je dus ook gewoon in je sql-statements opnemen (select naam, fname(1), bla, bla from bla,bla where etc.)
Uitgebreid voorbeeldje, maar dan heb je ook wat :-)
Bookmarks