现在的位置: 首页 > 综合 > 正文

Pro*C动态SQL总结1

2017年10月02日 ⁄ 综合 ⁄ 共 1309字 ⁄ 字号 评论关闭

五种典型语句:

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一是不能查询的!!!

 

抱歉!评论已关闭.