Below is a side-by-side comparison of Oracle PL/SQL and SQL Server T-SQL for someone coming from a PL/SQL background. This will help you quickly understand the syntax and behavior differences.
🔄 PL/SQL vs T-SQL Syntax Comparison
Concept / Operation | Oracle PL/SQL Syntax | SQL Server T-SQL Syntax |
---|---|---|
Anonymous Block | BEGIN ... END; | BEGIN ... END (no semicolon required) |
Variable Declaration | DECLARE v_name VARCHAR2(50); | DECLARE @v_name VARCHAR(50); |
Assignment | v_name := 'Hello'; | SET @v_name = 'Hello'; or SELECT @v_name = 'Hello'; |
Output Message | DBMS_OUTPUT.PUT_LINE('Hello'); | PRINT 'Hello'; |
IF Statement | IF condition THEN ... ELSIF ... ELSE ... END IF; | IF condition BEGIN ... END ELSE BEGIN ... END |
LOOP (Simple Loop) | LOOP ... EXIT WHEN condition; END LOOP; | WHILE 1 = 1 BEGIN ... IF condition BREAK; END |
FOR Loop (Numeric) | FOR i IN 1..5 LOOP ... END LOOP; | DECLARE @i INT = 1; WHILE @i <= 5 BEGIN ... SET @i += 1; END |
WHILE Loop | WHILE condition LOOP ... END LOOP; | WHILE condition BEGIN ... END |
Procedure Declaration | CREATE OR REPLACE PROCEDURE proc_name IS BEGIN ... END; | CREATE PROCEDURE proc_name AS BEGIN ... END |
Function Declaration | CREATE OR REPLACE FUNCTION func_name RETURN TYPE IS BEGIN ... END; | CREATE FUNCTION func_name() RETURNS TYPE AS BEGIN ... RETURN ... END |
Calling Procedure | EXEC proc_name; or BEGIN proc_name; END; | EXEC proc_name; or EXECUTE proc_name; |
Exception Handling | BEGIN ... EXCEPTION WHEN ... THEN ... END; | BEGIN TRY ... END TRY BEGIN CATCH ... END CATCH; |
Transactions (Manual) | COMMIT; / ROLLBACK; | BEGIN TRAN; / COMMIT; / ROLLBACK; |
CURSOR Declaration | CURSOR cur IS SELECT ...; | DECLARE cur CURSOR FOR SELECT ... |
CURSOR Looping | OPEN cur; FETCH ...; EXIT WHEN ...; CLOSE cur; | OPEN cur; FETCH NEXT FROM cur INTO ...; WHILE @@FETCH_STATUS = 0 ... |
Temporary Table | CREATE GLOBAL TEMPORARY TABLE ... | CREATE TABLE #temp_table (...) |
Autonumber / Sequence | CREATE SEQUENCE seq_name ... | IDENTITY column or SEQUENCE (since SQL Server 2012) |
String Concatenation | `’Hello’ | |
Getting Current Date | SYSDATE | GETDATE() or SYSDATETIME() |
Dual Table for SELECT | SELECT 1 FROM DUAL; | SELECT 1; |
🧠Key Behavioral Differences
Feature | PL/SQL (Oracle) | T-SQL (SQL Server) |
---|---|---|
Compilation | PL/SQL is compiled into bytecode | T-SQL is interpreted or compiled to native code |
Exception Handling | Structured, robust EXCEPTION block | TRY...CATCH block |
Package Support | Yes (with procedures, functions, variables) | No native package support |
Autonomous Transactions | Supported with PRAGMA AUTONOMOUS_TRANSACTION | Not directly supported |
RETURNING Clause | Supported in DML (e.g., RETURNING INTO ) | Only in OUTPUT clause with INSERT/UPDATE/DELETE |
Procedural Constructs | Rich in-built procedural features | Basic procedural constructs |