Good afternoon,
at PostgreSQL 9.5.3 I have a stored function (full source code below) returning void, which I successfully call with PHP:function skipGame($dbh, $uid, $gid) {
$sth = $dbh->prepare('SELECT words_skip_game(?, ?)');
$sth->execute(array($uid, $gid));
}
$sth = $dbh->prepare('SELECT words_skip_game(?, ?)');
$sth->execute(array($uid, $gid));
}
private static final String SQL_SKIP_GAME =
"SELECT words_skip_game(?, ?)";
try (PreparedStatement st = mDatabase.prepareStatement(SQL_SKIP_GAME)) {
st.setInt(1, mUid);
st.setInt(2, gid);
st.executeUpdate();
}
and sadly get the SQLException "A result was returned when none was expected.".
Shouldn't I call executeUpdate() method here - according to the doc
https://www.postgresql.org/docs/7.4/static/jdbc-callproc.html ?
https://www.postgresql.org/docs/7.4/static/jdbc-callproc.html ?
Below is the stored procedure, thank you for any hints.
Alex
CREATE OR REPLACE FUNCTION words_skip_game(
IN in_uid integer,
IN in_gid integer)
RETURNS void AS
$func$
BEGIN
UPDATE words_games
SET played1 = CURRENT_TIMESTAMP
WHERE gid = in_gid
AND player1 = in_uid
/* and it is first player's turn */
AND (played1 IS NULL OR played1 < played2);
IF NOT FOUND THEN
UPDATE words_games
SET played2 = CURRENT_TIMESTAMP
WHERE gid = in_gid
AND player2 = in_uid
/* and it is second player's turn */
AND (played2 IS NULL OR played2 < played1);
END IF;
END
$func$ LANGUAGE plpgsql;
IN in_uid integer,
IN in_gid integer)
RETURNS void AS
$func$
BEGIN
UPDATE words_games
SET played1 = CURRENT_TIMESTAMP
WHERE gid = in_gid
AND player1 = in_uid
/* and it is first player's turn */
AND (played1 IS NULL OR played1 < played2);
IF NOT FOUND THEN
UPDATE words_games
SET played2 = CURRENT_TIMESTAMP
WHERE gid = in_gid
AND player2 = in_uid
/* and it is second player's turn */
AND (played2 IS NULL OR played2 < played1);
END IF;
END
$func$ LANGUAGE plpgsql;