Beispiele für EXECUTE STATEMENT
mit Parametern
-
Mit benannten Parametern:
... DECLARE license_num VARCHAR(15); DECLARE connect_string VARCHAR (100); DECLARE stmt VARCHAR (100) = 'SELECT license FROM cars WHERE driver = :driver AND location = :loc'; BEGIN ... SELECT connstr FROM databases WHERE cust_id = :id INTO connect_string; ... FOR SELECT id FROM drivers INTO current_driver DO BEGIN FOR SELECT location FROM driver_locations WHERE driver_id = :current_driver INTO current_location DO BEGIN ... EXECUTE STATEMENT (stmt) (driver := current_driver, loc := current_location) ON EXTERNAL connect_string INTO license_num; ...
-
Derselbe Code mit Positionsparametern:
DECLARE license_num VARCHAR (15); DECLARE connect_string VARCHAR (100); DECLARE stmt VARCHAR (100) = 'SELECT license FROM cars WHERE driver = ? AND location = ?'; BEGIN ... SELECT connstr FROM databases WHERE cust_id = :id into connect_string; ... FOR SELECT id FROM drivers INTO current_driver DO BEGIN FOR SELECT location FROM driver_locations WHERE driver_id = :current_driver INTO current_location DO BEGIN ... EXECUTE STATEMENT (stmt) (current_driver, current_location) ON EXTERNAL connect_string INTO license_num; ...
-
Verwendung von
EXCESS
um benannte Parameter unbenutzt zu lassen (Hinweis: dies ist einFOR EXECUTE STATEMENT
):
CREATE PROCEDURE P_EXCESS (A_ID INT, A_TRAN INT = NULL, A_CONN INT = NULL)
RETURNS (ID INT, TRAN INT, CONN INT)
AS
DECLARE S VARCHAR(255);
DECLARE W VARCHAR(255) = '';
BEGIN
S = 'SELECT * FROM TTT WHERE ID = :ID';
IF (A_TRAN IS NOT NULL)
THEN W = W || ' AND TRAN = :a';
IF (A_CONN IS NOT NULL)
THEN W = W || ' AND CONN = :b';
IF (W <> '')
THEN S = S || W;
-- could raise error if TRAN or CONN is null
-- FOR EXECUTE STATEMENT (:S) (a := :A_TRAN, b := A_CONN, id := A_ID)
-- OK in all cases
FOR EXECUTE STATEMENT (:S) (EXCESS a := :A_TRAN, EXCESS b := A_CONN, id := A_ID)
INTO :ID, :TRAN, :CONN
DO SUSPEND;
END