数据库 proc编程九

第一种动态sql
EXEC SQL EXECUTE IMMEDIATE :psql;
1.仅适用于非select语句
2.嵌入SQL语句中不能包含输入宿主变量
void main()
{
    EXEC SQL WHENEVER SQLERROR DO sqlerr();
    EXEC SQL connect:serverid ;
    printf("connect ok!\r\n");
    char buf[100]={0};
    while(1)
    {
        memset(buf,0,sizeof(buf));
        memset(psql,0,sizeof(psql));
        printf("\r\n SQL:");
        gets(buf);
        if(buf[0]=='0')
        {
            break;
        }
        strcpy(psql,buf);
        //动态sql第一种
        EXEC SQL EXECUTE IMMEDIATE :psql;
        EXEC SQL COMMIT;
        printf("SQL 语句执行成功 !\r\n");
    }
    //提交断开连接
    EXEC SQL COMMIT RELEASE;
    system("pause");
}
第二种动态sql
EXEC SQL PREPARE 标识符 FROM 'SQL语句';
EXEC SQL EXECUTE 标识符 USING 宿主变量1,宿主变量2;
1.仅适用于非select语句
2.嵌入SQL语句中可以包含输入宿主变量和指示变量,其个数和类型在预编译时已知。
void main()
{
    EXEC SQL WHENEVER SQLERROR DO sqlerr();
    EXEC SQL connect:serverid ;
    printf("connect ok!\r\n");
    while(1)
    {
        memset(name1,0,sizeof(name1));
        printf("\r\n 请输入要修改的ida的ID:");
        scanf("%d",&ida1);
        getchar();
        printf("\r\n 请输入要修改的name的值:");
        gets(name1);
        if(ida1==0)
        {
            break;
        }
        //动态sql第二种
        //准备固定的sql语句
        //mypresql:准备sql语句的标识符
        //:a和:b :并非宿主变量,而是一个占位符
        EXEC SQL PREPARE mypresql FROM 'update t2 set name=:a where ida=:b';
        //执行动态sql
        EXEC SQL EXECUTE mypresql USING :name1,:ida1;

        EXEC SQL COMMIT;
        printf("SQL 语句执行成功 !\r\n");
    }
    //提交断开连接
    EXEC SQL COMMIT RELEASE;
    system("pause");
}
第三种动态sql
1.输入宿主变量个数固定 查询条件固定
2.输出宿主变量个数固定 返回结果固定
void main()
{
    EXEC SQL WHENEVER SQLERROR DO sqlerr();
    EXEC SQL connect:serverid ;
    printf("connect ok!\r\n");
    while(1)
    {
        memset(name1,0,sizeof(name1));
        printf("\r\n 请输入要查询的name的值:");
        gets(name1);
        if(name1[0]=='0')
        {
            break;
        }
        //动态sql第三种
        //准备固定的sql语句
        //mypresql:准备sql语句的标识符
        //:a和:b :并非宿主变量,而是一个占位符
        EXEC SQL PREPARE mypresql FROM 'select ida,idb,name from t2 where name=:a';
        //定义游标
        EXEC SQL DECLARE c CURSOR FOR mypresql;
        //打开游标,传入参数
        EXEC SQL OPEN c USING :name1;
        //查询数据
        EXEC SQL WHENEVER NOT FOUND DO BREAK;
        while(1)
        {
            exec sql fetch c into :ida2,:idb2,:name2:name2_ind;
            if(name2_ind==-1)
            {
                memset(name2,0,sizeof(name2));
                strcpy(name2,"null");
            }
            printf("ida=%d,idb=%d,name=%s\r\n",ida2,idb2,name2);
        }
        //关闭游标
        EXEC SQL CLOSE c;
    }
    //提交断开连接
    EXEC SQL COMMIT RELEASE;
    system("pause");
}

 

posted on 2017-01-13 21:59  寒魔影  阅读(291)  评论(0编辑  收藏  举报

导航