A stored procedure is code that lives in the database, not in your application. You define it once with a CREATE PROCEDURE statement, give it a name and some parameters, and from then on any client can run the whole thing by calling that name. Postgres, SQL Server, MySQL, and Oracle all support this, each with its own procedural language: PL/pgSQL in Postgres, T-SQL in SQL Server, and PL/SQL in Oracle.
Unlike a plain SQL query, a procedure can hold real program logic. It can take inputs, declare local variables, branch with IF, loop, run several statements in sequence, open transactions, and return values or result sets. So a single CALL can do work that would otherwise be five or six separate queries fired from your app.
People often confuse stored procedures with functions and views. A view is a saved SELECT that you query like a table. A function returns a value and is usually meant to be used inside a query. A stored procedure is the one that runs a sequence of statements as a unit and can change data, manage transactions, and return multiple result sets.