Dynamics SQL
Skočit na navigaci
Skočit na vyhledávání
CREATE OR REPLACE FUNCTION fx()
RETURNS int AS
$$
BEGIN
DECLARE a,b int;
EXECUTE IMMEDIATE 'SELECT 10,20' INTO a,b;
PRINT a,b;
RETURN a+b;
END;
$$ LANGUAGE plpgpsm;
Syntax
EXECUTE IMMEDIATE vyraz [INTO (variables list| RECCORD or ROW variable)] [USING variables list]
CREATE OR REPLACE FUNCTION fxx(a int)
RETURNS float AS
$$
BEGIN
DECLARE f float;
PREPARE prep(float) from 'select $1';
EXECUTE prep INTO f USING a;
RETURN f ;
END;
$$ LANGUAGE plpgpsm;
CREATE FUNCTION
Syntax
PREPARE name [ '(' types list ')' ] FROM expression
EXECUTE name [INTO (variables list | RECORD or ROW expression)]
[USING variables list]
CREATE OR REPLACE FUNCTION fx(a int)
RETURNS int AS
$$
#option dump
BEGIN
DECLARE x, y integer;
DECLARE SQLSTATE char(5);
DECLARE cx CURSOR FOR prepstmt;
PREPARE prepstmt(int) FROM 'SELECT a*100, b*100 FROM Foo WHERE Foo.a = $1';
OPEN cx USING a;
FETCH cx INTO x, y;
WHILE SQLSTATE = '00000' DO
PRINT x, y;
FETCH cx INTO x, y;
END WHILE;
CLOSE cx;
RETURN a;
END;
$$ LANGUAGE plpgpsm;
--dangerous, variables _tab and _var are security risk EXECUTE IMMEDIATE 'SELECT * FROM '|| _tab || ' WHERE a = ''' || _var ||''' INTO _a, _b; -- less security risk, _tab cannot contains special chars. -- only _tabs is security risk PREPARE psel(varchar) 'SELECT * FROM ' || _tab || 'WHERE a = ?'; EXECUTE psel INTO _a, _b USING _var;