Advanced SQL
- The SQL standard defines embeddings of SQL in a variety of programming languages such as C, Java, and Cobol.
- A language to which SQL queries are embedded is referred to as a host language, and the SQL structures permitted in the host language comprise embedded SQL.
- Main issues: exchange of parameters and results between the host language and SQL statements; sets vs. variables; get the execution status of the SQL statements; compile to host language;
C |
---|
| EXEC SQL update instructor set salary=salary*1.05 where salary<:some_amount END_EXEC;//:some_amount is a host variable
```c
EXEC SQL
declare c cursor for
select ID, name
from student
where tot_cred > :credit_amount
END_EXEC
|
- fetch: fetch the next row from the cursor
C |
---|
| EXEC SQL fetch c into :student_id, :student_name END_EXEC
|
Repeated calls to fetch get successive tuples in the query result
A variable called SQLSTATE in the SQL communication area (SQLCA) gets set to ‘02000’ to indicate no more data is available
C |
---|
| EXEC SQL close c END_EXEC
|
C |
---|
| void getStudentInfo()
{
int credit_amount;
char sId[16];
char sName[16];
EXEC SQL declare c cursor select id, name from student where tot_cred> :credit_amount END EXEC;
printf("Please input the credit amount: ");
scanf("%d",&credit_amount);
EXEC SQL open c END_EXEC;
while (1)
{
EXEC SQL fetch c into :sId, :sName END_EXEC;
if (!strcmp(SQLSTATE,"02000"))
break;
printf("%s %s\n",sId,sName);
}
EXEC SQL close c END_EXEC;
}
|
C |
---|
| delcare c cursor for
select *
from instructor
where dept_name='Music'
for update
|
C |
---|
| update instructor
set salary=salary+100
where current of c
|
illustration

- Driver and DSN configuration:
C |
---|
| int ODBCexample()
{
RETCODE error;
HENV env; /* environment */
HDBC conn; /* database connection */
SQLAllocEnv(&env);
SQLAllocConnect(env, &conn);
SQLConnect(conn, “Mike", SQL_NTS, "avi", SQL_NTS, "avipasswd", SQL_NTS);
{ …. Do actual work , usually use a statement handle to do the querey… }
SQLDisconnect(conn);
SQLFreeConnect(conn);
SQLFreeEnv(env);
}
|