Bird
Raised Fist0
SQLquery~10 mins

CREATE PROCEDURE syntax in SQL - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - CREATE PROCEDURE syntax
Start CREATE PROCEDURE
↓
Define Procedure Name
↓
Specify Parameters (optional)
↓
Write Procedure Body
↓
End with DELIMITER or END
↓
Procedure Stored in Database
This flow shows how a stored procedure is created step-by-step: naming it, adding parameters, writing the body, and saving it.
Execution Sample
SQL
DELIMITER $$
CREATE PROCEDURE greetUser(IN userName VARCHAR(50))
BEGIN
  SELECT CONCAT('Hello, ', userName) AS greeting;
END$$
DELIMITER ;
This code creates a procedure named greetUser that takes a name and returns a greeting message.
Execution Table
StepActionEvaluationResult
1Set DELIMITER to $$DELIMITER changedAllows procedure body with semicolons
2CREATE PROCEDURE greetUserProcedure name setProcedure greetUser defined
3Define parameter IN userName VARCHAR(50)Parameter acceptedInput parameter userName ready
4BEGIN block startsProcedure body beginsReady to write SQL statements
5SELECT CONCAT('Hello, ', userName) AS greeting;Concatenate stringReturns greeting message
6END block endsProcedure body endsProcedure body complete
7DELIMITER reset to ;DELIMITER restoredProcedure stored successfully
💡 Procedure creation ends after DELIMITER reset; procedure is stored in database.
Variable Tracker
VariableStartAfter Step 3After Step 5Final
userNameundefinedInput parameter definedUsed in CONCATInput parameter used in procedure
Key Moments - 3 Insights
Why do we change the DELIMITER before and after creating the procedure?
We change DELIMITER (see execution_table step 1 and 7) to allow semicolons inside the procedure body without ending the CREATE statement early.
What does the IN keyword before userName mean?
IN means userName is an input parameter to the procedure (execution_table step 3), so the caller must provide a value.
Why do we use BEGIN and END inside the procedure?
BEGIN and END (steps 4 and 6) group multiple SQL statements as the procedure body, even if there is only one statement.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what happens at step 5?
AThe greeting message is created using CONCAT
BThe procedure name is set
CThe DELIMITER is reset
DThe parameter userName is defined
💡 Hint
Check the Action and Evaluation columns at step 5 in the execution_table
At which step does the procedure body start?
AStep 2
BStep 4
CStep 3
DStep 6
💡 Hint
Look for 'BEGIN block starts' in the Action column of execution_table
If we did not change the DELIMITER at step 1, what would happen?
AThe parameter would not be recognized
BThe procedure would be created successfully
CThe CREATE PROCEDURE statement would end too early at the first semicolon
DThe procedure body would be ignored
💡 Hint
Refer to the key_moments explanation about DELIMITER usage
Concept Snapshot
CREATE PROCEDURE syntax:
DELIMITER $$
CREATE PROCEDURE procName([IN|OUT|INOUT] param datatype)
BEGIN
  -- SQL statements;
END$$
DELIMITER ;
Use DELIMITER to allow semicolons inside procedure body.
Parameters can be input (IN), output (OUT), or both (INOUT).
Full Transcript
Creating a stored procedure in SQL involves several steps. First, we change the DELIMITER to allow semicolons inside the procedure body without ending the statement early. Then, we write CREATE PROCEDURE followed by the procedure name and optional parameters. The procedure body is enclosed between BEGIN and END, where SQL statements are written. Finally, we reset the DELIMITER to the default. This process stores the procedure in the database for later use.

Practice

(1/5)
1. What is the main purpose of the CREATE PROCEDURE statement in SQL?
easy
A. To display data from a table
B. To delete data from a table
C. To create a new database
D. To save a set of SQL commands that can be run later

Solution

  1. Step 1: Understand the purpose of CREATE PROCEDURE

    The CREATE PROCEDURE statement is used to save a group of SQL commands as a procedure that can be executed later.
  2. Step 2: Compare options with the purpose

    Options B, C, and D describe other SQL commands, not the purpose of CREATE PROCEDURE.
  3. Final Answer:

    To save a set of SQL commands that can be run later -> Option D
  4. Quick Check:

    CREATE PROCEDURE saves commands = A [OK]
Hint: Remember: procedures store commands to run later [OK]
Common Mistakes:
  • Confusing CREATE PROCEDURE with CREATE TABLE
  • Thinking it runs commands immediately
  • Mixing it up with SELECT statement
2. Which of the following is the correct basic syntax to create a procedure named GetUsers without parameters?
easy
A. CREATE PROCEDURE GetUsers AS SELECT * FROM Users;
B. CREATE PROCEDURE GetUsers BEGIN SELECT * FROM Users; END;
C. CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM Users; END;
D. CREATE PROCEDURE GetUsers SELECT * FROM Users;

Solution

  1. Step 1: Recall standard procedure syntax

    The correct syntax includes parentheses for parameters (empty if none), and a BEGIN...END block to enclose statements.
  2. Step 2: Check each option

    CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM Users; END; correctly uses CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM Users; END;. Options A, C, and D miss parentheses or BEGIN...END or have syntax errors.
  3. Final Answer:

    CREATE PROCEDURE GetUsers() BEGIN SELECT * FROM Users; END; -> Option C
  4. Quick Check:

    Procedure syntax needs () and BEGIN...END = B [OK]
Hint: Always use () and BEGIN...END in procedure syntax [OK]
Common Mistakes:
  • Omitting parentheses after procedure name
  • Not using BEGIN and END to wrap statements
  • Missing semicolon inside procedure
3. Given the procedure below, what will be the output when calling CALL GetUserCount();?
CREATE PROCEDURE GetUserCount()
BEGIN
  SELECT COUNT(*) AS TotalUsers FROM Users;
END;
medium
A. No output because procedure does not return anything
B. The total number of rows in the Users table
C. Syntax error because of missing parameters
D. An error because SELECT cannot be used in procedures

Solution

  1. Step 1: Understand what the procedure does

    The procedure runs a SELECT COUNT(*) query on the Users table and returns the count as TotalUsers.
  2. Step 2: Analyze the CALL statement output

    Calling CALL GetUserCount(); executes the procedure and returns the count of rows in Users table as a result set.
  3. Final Answer:

    The total number of rows in the Users table -> Option B
  4. Quick Check:

    CALL runs procedure and returns SELECT result = C [OK]
Hint: CALL runs procedure and returns SELECT results [OK]
Common Mistakes:
  • Thinking procedures cannot return SELECT results
  • Assuming parameters are always required
  • Confusing procedure call with function call
4. Identify the error in the following procedure definition:
CREATE PROCEDURE AddUser(
  IN username VARCHAR(50),
  IN email VARCHAR(100)
)
INSERT INTO Users (Username, Email) VALUES (username, email);
END;
medium
A. Missing BEGIN before the INSERT statement
B. Parameters should not have IN keyword
C. END keyword is not needed
D. Procedure name cannot have parameters

Solution

  1. Step 1: Check procedure block structure

    Procedures must enclose statements inside BEGIN and END blocks. This code misses BEGIN before INSERT.
  2. Step 2: Verify other syntax parts

    IN keyword for parameters is correct, END is needed, and procedure names can have parameters.
  3. Final Answer:

    Missing BEGIN before the INSERT statement -> Option A
  4. Quick Check:

    Procedures need BEGIN...END blocks = A [OK]
Hint: Always wrap procedure statements with BEGIN and END [OK]
Common Mistakes:
  • Forgetting BEGIN before statements
  • Removing IN keyword from parameters
  • Omitting END keyword
5. You want to create a procedure UpdateUserEmail that takes a user ID and a new email, then updates the user's email in the Users table. Which of the following is the correct complete procedure?
hard
A. CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = newEmail WHERE Id = userId; END;
B. CREATE PROCEDURE UpdateUserEmail(userId INT, newEmail VARCHAR(100)) UPDATE Users SET Email = newEmail WHERE Id = userId;
C. CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) UPDATE Users SET Email = newEmail WHERE Id = userId; END;
D. CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = 'newEmail' WHERE Id = userId; END;

Solution

  1. Step 1: Check parameter declaration and statement block

    Parameters must have IN keyword and the statements must be inside BEGIN...END.
  2. Step 2: Verify the UPDATE statement correctness

    CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = newEmail WHERE Id = userId; END; correctly uses parameters without quotes around newEmail, so it updates with the variable value. CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = 'newEmail' WHERE Id = userId; END; incorrectly uses quotes, making it a string literal.
  3. Final Answer:

    CREATE PROCEDURE UpdateUserEmail(IN userId INT, IN newEmail VARCHAR(100)) BEGIN UPDATE Users SET Email = newEmail WHERE Id = userId; END; -> Option A
  4. Quick Check:

    Parameters with IN and BEGIN...END, no quotes on variables = D [OK]
Hint: Use IN parameters and BEGIN...END; no quotes on variables [OK]
Common Mistakes:
  • Omitting BEGIN...END block
  • Forgetting IN keyword for parameters
  • Using quotes around parameter variables in SQL
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard