五种典型语句:
1.create table temp(cola int);
2.delete from emp where empno:=7788;
3.delete from emp where empno=:no;
4.select ename from emp where empno=:no;
5 select :a,:b from :c where empno=:no;
对于动态SQL一功能有1、2,其实这个时候动态SQL还没有发挥它应该有的作用,这个时候功能赶不上静态SQL
主要是通过 EXEC SQL EXECUTE IMMEDIATE :sql_statement来实现动态sql就是根据用户的输入来确定SQL语句
但由于SQL语句中没有变量所以处理很简单
给出程序
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
void connect();
void sql_err();
void dynamic_sqlone();
void main()
{
EXEC SQL WHENEVER SQLERROR DO sql_err();
connect();
cursor();
EXEC SQL COMMIT RELEASE;
}
void sql_err()
{
printf("%.*s\n",sqlca.sqlerrm.sqlerrml,,sqlca.sqlerrm.sqlerrmc);
}
void connect()/*数据库连接-本地数据库,不添加server*/
{
EXEC SQL BEGIN DECLARE SECTION;
char username[20],password[20];
EXEC SQL END DECLARE SECTION;
printf("input username: ");
gets(username);
printf("input password: ");
gets(password);
EXEC SQL CONNECT :username IDENTIFIED BY :password;
}
void dynamic_sqlone()
{
EXEC SQL BEGIN DECLARE SECTION;
char sql_statement[100];
char control;
EXEC SQL END DECLARE SECTION;
for(;;)
{
printf("input the sqlstatement u want to execute:\n");
gets(sql_statement);
EXEC SQL EXECUTE IMMEDIATE :sql_statement;
printf("continue? (Y/N): ");
scanf("%c",&control);
getchar();
if(control=='N'||control=='n') break;
}
}
执行
本例中,在程序没有结束前查询表,表中并没有数据,因为还没有写进去,所以这个时候查询为空,当程序退出后可以查看。
注意动态SQL一是不能查询的!!!