2019独角兽企业重金招聘Python工程师标准>>>

pro*c 倒出数据库数据 博客分类: 数据库

最近项目要做对数据库,大数据量的倒数,打算用pro*c倒出。然后再用sqlload倒入别的库中

ANSI动态sql

/* sqlcheck=full */
/* userid=scott/password@exam */
/* mode=ansi *//* 包含C头文件 */
#include <stdio.h>
#include <string.h>/* 包含SQLCA头文件 */
#include <sqlca.h>/* 定义选择列表项名的最大长度 */
#define MAX_NAME_LEN    31/* 定义绑定变量值和选择列表项值的最大长度 */
#define MAX_VAR_LEN     200/* 定义宿主变量 */
exec sql begin declare section;char sql_stat[100];char current_date[20];
exec sql end declare section;void connect();
void sql_error();
void process_input();
void process_output();int main()
{/* 安装错误处理句柄 */exec sql whenever sqlerror do sql_error();/* 连接到数据库 */connect();/* 分配输入描述区和输出描述区 */exec sql allocate descriptor 'input_descriptor';exec sql allocate descriptor 'output_descriptor';for( ; ; ){printf("\n请输入动态SQL语句(EXIT:退出):\n");gets(sql_stat);/* EXIT(exit)->退出 */if(0 == strncmp(sql_stat , "EXIT" , 4) || 0 == strncmp(sql_stat , "exit" , 4))break;/* 准备动态SQL语句 */exec sql prepare s from :sql_stat;/* 定义游标 */exec sql declare c cursor for s;/* 处理绑定变量 */process_input();/* 打开游标* select语句:处理查询结果* 其他SQL语句:执行*/exec sql open c using descriptor 'input_descriptor';if(0 == strncmp(sql_stat , "SELECT" , 6) , 0 == strncmp(sql_stat , "select" , 6)){exec sql SELECT to_char(sysdate,'YYYYMMDD HH24:MI:SS') INTO :current_date FROM dual;printf("当前时间为%s\n",current_date);process_output();exec sql SELECT to_char(sysdate,'YYYYMMDD HH24:MI:SS') INTO :current_date FROM dual;printf("当前时间为%s\n",current_date);}/* 关闭游标 */exec sql close c;}/* 释放输入描述区和输出描述区 */exec sql deallocate descriptor 'input_descriptor';exec sql deallocate descriptor 'output_descriptor';/* 提交事务,断开连接 */exec sql commit work release;puts("谢谢使用ANSI动态SQL!\n");return 0;
}void connect()/*数据库连接-本地数据库,不添加server*/
{EXEC SQL BEGIN DECLARE SECTION;VARCHAR oraCN[30];EXEC SQL END DECLARE SECTION;strcpy(oraCN.arr,"scott/tiger@TEST_dist");EXEC SQL CONNECT :oraCN;
}void sql_error()
{/* 显示SQL错误 */printf("%.*s\n" , sqlca.sqlerrm.sqlerrml , sqlca.sqlerrm.sqlerrmc);
}void process_input()
{int i;/* 定义宿主变量 */exec sql begin declare section;int input_count;int input_type ;int input_len;char input_buffer[MAX_VAR_LEN];char name[MAX_NAME_LEN];int occurs;exec sql end declare section;/* 绑定变量->输入描述区 */exec sql describe input s using descriptor 'input_descriptor';/* 取得绑定变量个数 */exec sql get descriptor 'input_descriptor' :input_count = count;/* 循环处理绑定变量名 */for(i = 0 ; i != input_count ; ++i){occurs = i + 1;/* 取得绑定变量名 */exec sql get descriptor 'input_descriptor' value :occurs :name = name;printf("请输入%s的值:" , name);gets(input_buffer);/* 以NULL结尾 */input_len = strlen(input_buffer);input_buffer[input_len] = '\0';/* 设置绑定变量类型、长度和值 */input_type = 12;exec sql set descriptor 'input_descriptor' value :occurs type = :input_type , length = :input_len , data = :input_buffer;}
}void process_output()
{int i;/* 定义宿主变量 */exec sql begin declare section;int output_count;int output_type;int output_len;char output_buffer[MAX_VAR_LEN];short output_indicator;char name[MAX_NAME_LEN];int occurs;exec sql end declare section;FILE *fp;if((fp=fopen("c:\\test.txt","wt+"))==NULL)//读写打开或建立一个文本文件,允许读写   {   printf("Cannot open file strike any key exit!");   } /* 选择列表项->输出描述区 */exec sql describe output s using descriptor 'output_descriptor';/* 取得选择列表项个数 */exec sql get descriptor 'output_descriptor' :output_count = count;/* 循环处理选择列表项 */for(i = 0 ; i != output_count ; ++i){occurs = i + 1;output_type = 12;output_len = MAX_VAR_LEN;/* 设置选择列表项的类型和长度 */exec sql set descriptor 'output_descriptor' value :occurs type = :output_type , length = :output_len;/* 取得选择列表项的名称并输出 */exec sql get descriptor 'output_descriptor' value :occurs :name = name;printf("\t%s" , name);}printf("\n");/* 提取数据完毕->退出循环 */exec sql whenever not found do break;/* 循环处理选择列表项数据 */for( ; ; ){/* 行数据->输出描述区 */exec sql fetch c into descriptor 'output_descriptor';/* 循环处理每列数据 */for(i = 0 ; i != output_count ; ++i){occurs = i +1;/* 取得列数据和指示变量值 */exec sql get descriptor 'output_descriptor' value :occurs:output_buffer = data , :output_indicator = indicator;/* 输出列数据 */if(-1 == output_indicator)if(i!=0){//printf(" || NULL");fprintf(fp," || %s","null");   }else{//    printf("NULL");fprintf(fp,"%s","null");  }            elseif(i!=0){// printf(" || %s" , output_buffer);fprintf(fp," || %s",output_buffer);   }else{// printf("%s" , output_buffer);fprintf(fp,"%s",output_buffer); }}// printf("\n");fprintf(fp,"%s","\n"); }fclose(fp);
}

oracle 动态sql4

/* 包含C头文件 */
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <setjmp.h>
#include <sqlcpr.h>/* 包含SQLDA和SQLCA结构 */
#include <sqlda.h>
#include <sqlca.h>/* 定义绑定变量和选择列表项的最大个数 */
#define MAX_ITEMS       40/* 定义绑定变量和选择列表项名称的最大长度 */
#define MAX_VNAME_LEN   30/* 定义指示变量名称的最大长度 */
#define MAX_INAME_LEN   30void connect();
void sql_error();
void alloc_descriptors(int , int , int);
void dealloc_descriptors();
void set_bind_variables();
void process_select_list();/* 定义绑定描述区和选择描述区 */
SQLDA* bind_dp;
SQLDA* select_dp;/* 定义输入宿主变量:存放动态SQL语句 */
char sql_stat[100];
char current_date[20];   int main()
{/* 安装错误处理句柄 */exec sql whenever sqlerror do sql_error();/* 连接到数据库 */connect();/* 分配绑定描述区和选择描述区 */alloc_descriptors(MAX_ITEMS , MAX_VNAME_LEN , MAX_INAME_LEN);for( ; ; ){printf("请输入动态SQL语句(exit:退出):");gets(sql_stat);/* EXIT(exit):退出 */if(0 == strncmp(sql_stat , "exit" , 4) || 0 == strncmp(sql_stat , "EXIT" , 4))break;/* 准备动态SQL语句 */exec sql prepare s from :sql_stat;/* 定义游标 */exec sql declare c cursor for s;/* 出错,继续下一循环 */if(0 != sqlca.sqlcode)continue;/* 设置绑定变量 */set_bind_variables();/** 打开游标* select语句:生成结果集* 其他SQL语句:执行语句*/exec sql open c using descriptor bind_dp;/** select语句*/if(0 == strncmp(sql_stat , "select" , 6) || 0 == strncmp(sql_stat , "SELECT" , 6)){/* 处理select语句输出结果 */exec sql SELECT to_char(sysdate,'YYYYMMDD HH24:MI:SS') INTO :current_date FROM dual; printf("当前时间为%s\n",current_date);     process_select_list();exec sql SELECT to_char(sysdate,'YYYYMMDD HH24:MI:SS') INTO :current_date FROM dual;   printf("当前时间为%s\n",current_date);   }/* 关闭游标 */exec sql close c;}/* 释放选择描述区和选择描述区 */dealloc_descriptors();/* 提交事务,断开连接 */exec sql commit work release;puts("谢谢使用Oracle动态SQL方法四!\n");return 0;
}
void connect()/*数据库连接-本地数据库,不添加server*/
{   EXEC SQL BEGIN DECLARE SECTION;   VARCHAR oraCN[30];   EXEC SQL END DECLARE SECTION;   strcpy(oraCN.arr,"scott/tiger@TEST_dist");   EXEC SQL CONNECT :oraCN;
}   void connect2()
{/* 定义宿主变量 */char username[20] , password[20] , server[20];/* 输入用户名、口令和网络服务名 */printf("输入用户名:");gets(username);printf("输入口令:");gets(password);printf("输入网络服务名:");gets(server);/* 连接到数据库 */exec sql connect :username identified by :password using :server;
}void sql_error()
{/* 显示SQL错误信息 */printf("%.*s\n" , sqlca.sqlerrm.sqlerrml , sqlca.sqlerrm.sqlerrmc);
}void alloc_descriptors(int size , int max_vname_len , int max_iname_len)
{int i;/* 分配绑定描述区和选择描述区 */bind_dp = SQLSQLDAAlloc(0 , size , MAX_VNAME_LEN , MAX_INAME_LEN);select_dp = SQLSQLDAAlloc(0 , size , MAX_VNAME_LEN , MAX_INAME_LEN);/* 为指示变量、绑定变量和选择列表项分配内存 */for(i = 0 ; i != MAX_ITEMS ; ++i){bind_dp->I[i] = (short*)malloc(sizeof(short));select_dp->I[i] = (short*)malloc(sizeof(short));bind_dp->V[i] = (char*)malloc(1);select_dp->V[i] = (char*)malloc(1);}
}void dealloc_descriptors()
{int i;/* 释放指示变量、绑定变量和选择列表项占用的内存 */for(i = 0 ; i != MAX_ITEMS ; ++i){if(bind_dp->V[i] != (char*)0)free(bind_dp->V[i]);free(bind_dp->I[i]);if(select_dp->V[i] != (char*)0)free(select_dp->V[i]);free(select_dp->I[i]);}/* 释放绑定描述区和选择描述区 */SQLSQLDAFree(0 , bind_dp);SQLSQLDAFree(0 , select_dp);
}void set_bind_variables()
{int i;char bind_var[64];/* 设置绑定变量最大个数 */bind_dp->N = MAX_ITEMS;/* 绑定变量名称->绑定描述区 */exec sql describe bind variables for s into bind_dp;/* 设置绑定变量实际个数 */bind_dp->N = bind_dp->F;/* 循环处理绑定变量 */for(i = 0 ; i != bind_dp->F ; ++i){/* 显示绑定变量名 */printf("请输入绑定变量%.*s的值:" , (int)bind_dp->C[i] , bind_dp->S[i]);/* 输入绑定变量的值 */gets(bind_var);/* 设置绑定变量的长度成员 */bind_dp->L[i] = strlen(bind_var);/* 为绑定变量数据缓冲区重新分配内存(多一位,留给'\0') */bind_dp->V[i] = (char*)realloc(bind_dp->V[i] , bind_dp->L[i] + 1);/* 绑定变量数据->数据缓冲区 */strcpy(bind_dp->V[i] , bind_var);/* 设置指示变量,处理NULL */if(0 == strncmp(bind_var , "NULL" , 4) || 0 == strncmp(bind_var , "null" , 4))*bind_dp->I[i] = -1;else*bind_dp->I[i] = 0;/* 设置数据缓冲区数据类型代码->char */bind_dp->T[i] = 1;}
}void process_select_list()
{int i , null_ok , precision , scale;char title[MAX_VNAME_LEN];/* 设置选择列表项的最大个数 */select_dp->N = MAX_ITEMS;/* 选择列表项->选择描述区 */exec sql describe select list for s into select_dp;/* 设置选择列表项的实际个数 */select_dp->N = select_dp->F;/* 循环处理选择列表项 */for(i = 0 ; i != select_dp->F ; ++i){/* 清除select_dp->T[i]的高位->null */SQLColumnNullCheck(0 , (unsigned short*)&select_dp->T[i], (unsigned short*)&select_dp->T[i] , &null_ok);/* 根据内部数据类型确定外部类型数据长度(显示长度) */switch(select_dp->T[i]){case 2:/* number类型,取得精度与标度 */SQLNumberPrecV6(0 , (unsigned short*)&select_dp->T[i] , &precision , &scale);if(scale > 0)/* float */select_dp->L[i] = sizeof(float);else/* int */select_dp->L[i] = sizeof(int);break;case 12:/* DATA数据类型(DD-MON-YY) */select_dp->L[i] = 9;break;}/* 根据变量长度,重新为选择列表项数据缓冲区分配内存 */if(2 != select_dp->T[i])/* 其他类型 */select_dp->V[i] = (char*)realloc(select_dp->V[i] , select_dp->L[i] + 1);else/* number类型 */select_dp->V[i] = (char*)realloc(select_dp->V[i] , select_dp->L[i]);/* 初始化title */memset(title , ' ' , MAX_VNAME_LEN);/* 选择列表项名称->title */strncpy(title , select_dp->S[i] , select_dp->C[i]);/* 显示列名 */if(2 == select_dp->T[i])if(scale > 0)printf("\t%.*s" , select_dp->L[i] + 3, title);elseprintf("\t%.*s" , select_dp->L[i] , title);elseprintf("\t%-.*s" , select_dp->L[i] , title);/* 根据Oracle内部类型确定外部数据类型(显示类型) */if( 2 == select_dp->T[i]){/* number 类型*/if(scale > 0)/* float */select_dp->T[i] = 4;else/* int */select_dp->T[i] = 3;}else/* char */select_dp->T[i] = 1;}printf("\n");/* 提取数据完毕->结束循环 */exec sql whenever not found do break;/* 循环处理选择列表数据 */for( ; ; ){/* 数据->选择描述区 */exec sql fetch c using descriptor select_dp;/* 显示数据 */for( i = 0 ; i != select_dp->F ; ++i){if(*select_dp->I[i] < 0){/* 处理NULL */printf("\tNULL");}else{if(3 == select_dp->T[i]){/* int */printf("\t%d" , *(int*)select_dp->V[i]);}else if(4 == select_dp->T[i]){/* float */printf("\t%8.2f" , *(float*)select_dp->V[i]);}else{/* char */printf("\t%.*s" , select_dp->L[i] , select_dp->V[i]);}}}printf("\n");}
}

转载于:https://my.oschina.net/xiaominmin/blog/1598212

pro*c 倒出数据库数据相关推荐

  1. Mendix一练一动: Mendix Studio Pro连接外围数据库(SQL Server)实现增删改查

    一. 环境准备 1: 连接外围数据库是Mendix的内置功能,不同数据库的连接方式都大同小异,本文以SQL Server为例讲解: 2:本文假设读者是Mendix初级学者,因此对每一步骤作者都尽量表述 ...

  2. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...

     本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    (三)SSIS的简介    (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...

  3. mysql导出数据库数据及表结构

    mysql导出数据库数据及表结构 1,导出远程数据库数据到本地 mysql -A wj_sms -h192.168.1.105 -uroot -p4321 -ss -e "set NAMES ...

  4. android app数据库数据存放

    app数据库数据一般保存在 /data/data/app_package_name/databases目录下: name.db 查询数据库: sqlite3 name.db 查询表: sqlite&g ...

  5. springboot+mybatis+sqlserver导出数据库数据并实现下载到excel

    springboot+mybatis+sqlserver导出数据库数据并实现下载到excel 1.准备工作 1.1 下载一个springboot框架demo 1.2 配置maven 1.3 引入需要的 ...

  6. highcharts加载数据库数据(java版)

    前段时间因为项目需要使用了highcharts报表,新手可以参考http://www.hcharts.cn/,教程中有比较详细的介绍和demo.但是demo中的例子的数据都是静态数据,而在实际项目中一 ...

  7. solr mysql 分词_solr 7+tomcat 8 + mysql实现solr 7基本使用(安装、集成中文分词器、定时同步数据库数据以及项目集成)...

    基本说明 Solr是一个开源项目,基于Lucene的搜索服务器,一般用于高级的搜索功能: solr还支持各种插件(如中文分词器等),便于做多样化功能的集成: 提供页面操作,查看日志和配置信息,功能全面 ...

  8. 数据库数据用Excel导出的3种方法

    数据库数据用Excel导出的3种方法 分类: .Net 2008-06-30 11:07 173人阅读 评论(2) 收藏 举报 将数据库数据用Excel导出主要有3种方法:用Excel.Applica ...

  9. 黑马在线教育项目---5、使用填充器创建数据库数据

    黑马在线教育项目---5.使用填充器创建数据库数据 一.总结 一句话总结: ①创建填充器文件:#php artisan make:seeder ManagerTableSeeder ③执行填充器文件: ...

最新文章

  1. 多篇开源CVPR 2020 语义分割论文
  2. 在看不见的地方,AI正在7×24为你在线服务
  3. java面试题2(java基础)
  4. Java Data Base Connection(JDBC)
  5. opengl加载显示3D模型md5mesh类型文件
  6. 51nod 1307 绳子与重物 (标记父节点更新即可)
  7. Unity3D TestTool Part _1
  8. centos6.8 安装软件
  9. 抓包及分析包的常用命令
  10. oracle 数组的用法,Oracle数组用法
  11. Windows UWP开发系列 – 控件默认样式
  12. springboot+爱心捐赠小程序 毕业设计-附源码211711
  13. 财务风险分析从哪几个角度进行分析
  14. BitBake用户手册-3.语法和操作
  15. 三态门有一个信号控制端en_什么是三态门? 三态逻辑与非门电路以及三态门电路...
  16. 什么是SHA系列算法,SHA-1和MD5算法有什么区别
  17. 第二阶段--团队冲刺--第八天
  18. SII9136 调试出来, 欣喜若狂!(需要 SII9136 资料的请联系我!)
  19. CPU/GPU/GPGPU简介
  20. 11. 旋转数组的最小数字(剑指 Offer 题解Java版)

热门文章

  1. “人工智能=统计+计算”:专家表示人工智能无需“智能”
  2. 干货丨从感知机到深度神经网络,带你入坑深度学习
  3. torch.bmm()函数的使用
  4. 2022年六大值得关注的边缘计算趋势
  5. 国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南
  6. Curr Biol:间隔学习可巩固记忆的奥秘
  7. 机器人行业研究报告:智能化造就新时代,自动化生产成刚需
  8. IBM将收购Instana公司,持续推进其混合云和人工智能战略
  9. 把握芯片科技发展趋势 促进半导体产业创新突破
  10. 刘忠范院士:新型研发机构建设成了口号