sql:预期0参数,得到2

I'm struggling to properly utilize sqlx and the pq driver for Postgres to create a row in the database. Let's start simple:

I have a user, role and user_role table. I want to insert a role into the database and get the ID of the inserted row. This works flawlessly using the following sql:

const createRoleSQL = "INSERT INTO role (name) VALUES (:name) RETURNING id"

To make that work in go, I prepare the statement at some point:

createStmt, err := db.PrepareNamed(createRoleSQL)
if err != nil {
    // ...
}

When creating, I run the query as part of a transaction tx. role is obviously a struct with the correct fields and db tags:

if err := tx.NamedStmt(createStmt).QueryRow(role).Scan(&role.ID); err != nil {
    // ...
}

This works perfectly fine.

Now I wanted to extend that and insert a new role and assign it to a user:

const createUserRoleSQL = `
DO $$
DECLARE role_id role.id%TYPE;
BEGIN
    INSERT INTO role (name) VALUES ($2) RETURNING id INTO role_id;
    INSERT INTO user_role (user_id, role_id) VALUES ($1, role_id);
END $$`

createStmt, err := db.Preparex(createUserRoleSQL)
if err != nil {
    // ...
}

if err := tx.Stmtx(createStmt).QueryRow(userID, role.Name).Scan(&role.ID); err != nil {
    // ...
}

Unfortunately this fails with sql: expected 0 arguments, got 2. Is it possible to achieve what I want to do, with a single query?