Pro*C动态SQL总结1

五种典型语句:

1.create table temp(cola int);

2.delete from emp where empno:=7788;

3.delete from empwhere 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一是不能查询的!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值