proc dococument
proc dococument
Bind variables
4.Error Handling
SQLCA (SQL Communication Area)
Array Processing
9.Handling Transactions
COMMIT and ROLLBACK
Savepoints
---
---
Next Steps
I'll break down each section with a detailed explanation and examples to
ensure clarity.
---
1. Basics of Pro*C
1.1 Writing a Simple Pro*C Program
#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>
char emp_name[50];
int emp_id;
int main() {
if (sqlca.sqlcode < 0) {
exit(1);
printf("Connected successfully!\n");
// Fetch a single employee record
EXEC SQL SELECT empno, ename INTO :emp_id, :emp_name FROM emp
WHERE ROWNUM = 1;
if (sqlca.sqlcode == 0)
else
return 0;
Explanation:
---
while (1) {
if (sqlca.sqlcode != 0) break;
printf("Employee ID: %d, Name: %s\n", emp_id, emp_name);
Explanation:
---
Explanation:
---
EXEC SQL INSERT INTO emp (empno, ename) VALUES (:emp_id, :emp_name);
if (sqlca.sqlcode < 0) {
Explanation:
Hhhh
I'll go in-depth into each Pro*C topic, providing explanations and complete
code examples.
---
1. Basics of Pro*C
#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>
EXEC SQL BEGIN DECLARE SECTION;
char emp_name[50];
int emp_id;
int main() {
if (sqlca.sqlcode < 0) {
exit(1);
printf("Connected successfully!\n");
EXEC SQL SELECT empno, ename INTO :emp_id, :emp_name FROM emp
WHERE ROWNUM = 1;
if (sqlca.sqlcode == 0)
else
Explanation:
---
#include <stdlib.h>
#include <sqlca.h>
char emp_name[50];
int emp_id;
int main() {
while (1) {
if (sqlca.sqlcode != 0) break;
Explanation:
---
#include <stdio.h>
#include <stdlib.h>
#include <sqlca.h>
char sql_stmt[100];
int emp_id;
char emp_name[50];
int main() {
return 0;
Explanation:
---
EXEC SQL INSERT INTO emp (empno, ename) VALUES (:emp_id, :emp_name);
if (sqlca.sqlcode < 0) {
Explanation:
---
BEGIN
END;
END-EXEC;
Explanation:
---
3. Performance Optimization
int empnos[100];
char enames[100][50];
Explanation:
EXEC SQL SELECT photo INTO :emp_photo FROM emp WHERE empno
= :emp_id;
Explanation:
---
EXEC SQL UPDATE emp SET sal = sal + 500 WHERE empno = :emp_id;
---
Explanation:
---
Final Summary
Would you like me to explain any topic in more detail?
I'll dive deeper into each Pro*C topic with detailed explanations, examples,
best practices, and real-world scenarios.
---
1. Basics of Pro*C
PL/SQL integration in C
---
1.2 Components of Pro*C
SQL statements are written inside C programs using EXEC SQL syntax.
Example:
EXEC SQL SELECT ename INTO :emp_name FROM emp WHERE empno
= :emp_id;
Example:
char emp_name[50];
int emp_id;
---
./program
---
#include <sqlca.h>
int emp_id;
char emp_name[50];
int main() {
while (1) {
if (sqlca.sqlcode != 0) break;
return 0;
Best Practices:
✔ Always close the cursor
---
int emp_ids[100];
char emp_names[100][50];
---
#include <stdio.h>
#include <sqlca.h>
char sql_stmt[100];
int emp_id;
char emp_name[50];
int main() {
return 0;
---
Example:
if (sqlca.sqlcode < 0) {
---
EXEC SQL INSERT INTO emp (empno, ename) VALUES (:emp_id, :emp_name);
if (sqlca.sqlcode < 0) {
}
✔ Use WHENEVER SQLERROR EXIT for critical failures.
---
BEGIN
END;
END-EXEC;
---
6. Transactions in Pro*C
EXEC SQL UPDATE emp SET sal = sal + 500 WHERE empno = :emp_id;
---
---
---
8. Performance Optimization
---
9. Debugging in Pro*C
export PROC_TRACE=1
./program
---
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT empno, sal FROM
emp;
while (1) {
EXEC SQL FETCH emp_cursor BULK COLLECT
INTO :emp_ids, :emp_salaries;
if (sqlca.sqlcode != 0) break;
emp_salaries[i] += 500;
---
Final Summary
---
What Next?
✅ Try these examples on an Oracle database
---
BEGIN
END;
END-EXEC;
Explanation:
3. Performance Optimization
int empnos[100];
char enames[100][50];
Explanation:
EXEC SQL SELECT photo INTO :emp_photo FROM emp WHERE empno
= :emp_id;
Explanation:
---
Explanation:
---
---
Summary of Topics Covered:
✅ Cursors
✅ Dynamic SQL
✅ Error Handling
✅ PL/SQL Execution
✅ Bulk Processing
✅ Transactions
✅ Debugging
Here are Pro*C interview questions categorized by difficulty level, along with
sample answers.
---
1. What is Pro*C?
Answer:
Answer:
---
3. How do you declare host variables in Pro*C?
Answer:
char emp_name[50];
int emp_id;
---
Answer:
---
5. How do you compile a Pro*C program?
Answer:
3. Run:
./program
---
Example:
---
Answer:
int emp_ids[100];
char emp_names[100][50];
---
Answer:
Example:
EXEC SQL PREPARE stmt FROM 'SELECT ename FROM emp WHERE empno
= :emp_id';
---
Answer:
1. Using sqlca:
if (sqlca.sqlcode < 0) {
EXEC SQL INSERT INTO emp (empno, ename) VALUES (:emp_id, :emp_name);
---
Answer:
BEGIN
END;
END-EXEC;
---
Answer:
---
Answer:
---
13. What is the difference between static and dynamic SQL in Pro*C?
EXEC SQL SELECT ename INTO :emp_name FROM emp WHERE empno
= :emp_id;
---
Answer:
1. Enable tracing:
export PROC_TRACE=1
./program
---
Answer:
Example:
if (sqlca.sqlcode < 0) {
---
Answer:
char emp_name[50];
short emp_name_ind;
if (emp_name_ind == -1) {
}
✔ Indicator = -1 means NULL value.
---
Answer:
EXEC SQL SELECT photo INTO :emp_photo FROM emp WHERE empno
= :emp_id;
---
Answer:
---
19. What are some best practices for Pro*C performance tuning?
---
Answer:
---
Final Thoughts
These 20+ Pro*C interview questions cover the most important concepts,
best practices, and real-world scenarios.
Here are more advanced Pro*C interview questions along with practical
scenarios and performance optimization techniques.
---
21. What is the difference between Explicit and Implicit Cursors in Pro*C?
Answer:
Example:
EXEC SQL PREPARE stmt FROM 'SELECT ename FROM emp WHERE empno
= :emp_id';
---
23. How do you use Indicator Variables in Pro*C?
Answer:
Example:
char emp_name[50];
if (emp_name_ind == -1) {
---
EXEC SQL DECLARE emp_cursor CURSOR FOR SELECT empno, ename FROM
emp;
while (1) {
if (sqlca.sqlcode != 0) break;
---
Example:
BEGIN
my_procedure(:emp_id, :emp_name);
END;
END-EXEC;
---
Answer:
Example:
EXEC SQL SELECT empno, sal INTO :emp_id, :emp_sal FROM emp
---
27. What are the performance bottlenecks in Pro*C, and how do you fix
them?
Answer:
---
Answer:
Example:
---
Answer:
---
---
31. How would you process a large file (millions of records) in Pro*C?
✔ Use Bulk Inserts
✔ Commit in Batches
Example:
EXEC SQL FOR :batch_size INSERT INTO emp (empno, ename) VALUES
(:emp_ids, :emp_names);
---
export PROC_TRACE=1
./program
---
33. How would you optimize a Pro*C program for high concurrency?
Example:
EXEC SQL SELECT empno, ename FROM emp WHERE empno = :emp_id;
---
Example:
if (sqlca.sqlcode < 0) {
---
Example:
Final Summary