- 浏览: 1547601 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (532)
- 软件设计师 (7)
- PSP (5)
- NET MD (9)
- Hibernate (8)
- DIY (51)
- Work (43)
- GAME (24)
- 未分类 (44)
- iPod (6)
- MySQL (39)
- JSP (7)
- 日语能力考试 (36)
- 小说 (4)
- 豆包网 (23)
- 家用电脑 (7)
- DB2 (36)
- C/C++ (18)
- baby (9)
- Linux (13)
- thinkpad (23)
- OA (1)
- UML (6)
- oracle (24)
- 系统集成 (27)
- 脑梗塞 (6)
- 车 (8)
- MainFrame (8)
- Windows 7 (13)
- 手机 (8)
- git (12)
- AHK (2)
- COBOL (2)
- Java (9)
最新评论
-
安静听歌:
... ...
UUID做主键,好还是不好?这是个问题。 -
lehehe:
http://www.haoservice.com/docs/ ...
天气预报 -
lehehe:
[url http://www.haoservice.com/ ...
天气预报 -
liubang201010:
监控TUXEDO 的软件推荐用这个,专业,权威.并能提供报警和 ...
(转载)Tuxedo中间件简介 -
tinkame:
Next[j] =-1 当j=0时;=Max{k|0<k ...
KMP字符串模式匹配详解
示例:交互式 SQL 和等价的 DB2 UDB CLI 函数调用
此示例显示交互式 SQL 语句的执行,并遵循编写 DB2 UDB CLI 应用程序中描述的流程。
有关代码示例的信息,请参阅代码免责信息。
/************************************************************************* ** file = typical.c ** ** Example of executing interactive SQL statements, displaying result sets ** and simple transaction management. ** ** Functions used: ** ** SQLAllocConnect SQLFreeConnect ** SQLAllocEnv SQLFreeEnv ** SQLAllocStmt SQLFreeStmt ** SQLConnect SQLDisconnect ** ** SQLBindCol SQLFetch ** SQLDescribeCol SQLNumResultCols ** SQLError SQLRowCount ** SQLExecDirect SQLTransact ** **************************************************************************/ #include <stdlib.h> #include <stdio.h> #include <string.h> #include "sqlcli.h" #define MAX_STMT_LEN 255 #define MAXCOLS 100 #define max(a,b) (a > b ? a : b) int initialize(SQLHENV *henv, SQLHDBC *hdbc); int process_stmt(SQLHENV henv, SQLHDBC hdbc, SQLCHAR *sqlstr); int terminate(SQLHENV henv, SQLHDBC hdbc); int print_error(SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt); int check_error(SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLRETURN frc); void display_results(SQLHSTMT hstmt, SQLSMALLINT nresultcols); /******************************************************************* ** main ** - initialize ** - start a transaction ** - get statement ** - another statement? ** - COMMIT or ROLLBACK ** - another transaction? ** - terminate *******************************************************************/ int main() { SQLHENV henv; SQLHDBC hdbc; SQLCHAR sqlstmt[MAX_STMT_LEN + 1]=""; SQLCHAR sqltrans[sizeof("ROLLBACK")]; SQLRETURN rc; rc = initialize(&henv, &hdbc); if (rc == SQL_ERROR) return(terminate(henv, hdbc)); printf("Enter an SQL statement to start a transaction(or 'q' to Quit):\n"); gets(sqlstmt); while (sqlstmt[0] !='q') { while (sqlstmt[0] != 'q') { rc = process_stmt(henv, hdbc, sqlstmt); if (rc == SQL_ERROR) return(SQL_ERROR); printf("Enter an SQL statement(or 'q' to Quit):\n"); gets(sqlstmt); } printf("Enter 'c' to COMMIT or 'r' to ROLLBACK the transaction\n"); fgets(sqltrans, sizeof("ROLLBACK"), stdin); if (sqltrans[0] == 'c') { rc = SQLTransact (henv, hdbc, SQL_COMMIT); if (rc == SQL_SUCCESS) printf ("Transaction commit was successful\n"); else check_error (henv, hdbc, SQL_NULL_HSTMT, rc); } if (sqltrans[0] == 'r') { rc = SQLTransact (henv, hdbc, SQL_ROLLBACK); if (rc == SQL_SUCCESS) printf ("Transaction roll back was successful\n"); else check_error (henv, hdbc, SQL_NULL_HSTMT, rc); } printf("Enter an SQL statement to start a transaction or 'q' to quit\n"); gets(sqlstmt); } terminate(henv, hdbc); return (SQL_SUCCESS); }/* end main */ /******************************************************************* ** process_stmt ** - allocates a statement handle ** - executes the statement ** - determines the type of statement ** - if there are no result columns, therefore non-select statement ** - if rowcount > 0, assume statement was UPDATE, INSERT, DELETE ** else ** - assume a DDL, or Grant/Revoke statement ** else ** - must be a select statement. ** - display results ** - frees the statement handle *******************************************************************/ int process_stmt (SQLHENV henv, SQLHDBC hdbc, SQLCHAR *sqlstr) { SQLHSTMT hstmt; SQLSMALLINT nresultcols; SQLINTEGER rowcount; SQLRETURN rc; SQLAllocStmt (hdbc, &hstmt); /* allocate a statement handle */ /* execute the SQL statement in "sqlstr" */ rc = SQLExecDirect (hstmt, sqlstr, SQL_NTS); if (rc != SQL_SUCCESS) if (rc == SQL_NO_DATA_FOUND) { printf("\nStatement executed without error, however,\n"); printf("no data was found or modified\n"); return (SQL_SUCCESS); } else check_error (henv, hdbc, hstmt, rc); SQLRowCount (hstmt, &rowcount); rc = SQLNumResultCols (hstmt, &nresultcols); if (rc != SQL_SUCCESS) check_error (henv, hdbc, hstmt, rc); /* determine statement type */ if (nresultcols == 0) /* statement is not a select statement */ { if (rowcount > 0 ) /* assume statement is UPDATE, INSERT, DELETE */ { printf ("Statement executed, %ld rows affected\n", rowcount); } else /* assume statement is GRANT, REVOKE or a DLL statement */ { printf ("Statement completed successful\n"); } } else /* display the result set */ { display_results(hstmt, nresultcols); } /* end determine statement type */ SQLFreeStmt (hstmt, SQL_DROP ); /* free statement handle */ return (0); }/* end process_stmt */ /******************************************************************* ** initialize ** - allocate environment handle ** - allocate connection handle ** - prompt for server, user id, & password ** - connect to server *******************************************************************/ int initialize(SQLHENV *henv, SQLHDBC *hdbc) { SQLCHAR server[18], uid[10], pwd[10]; SQLRETURN rc; rc = SQLAllocEnv (henv); /* allocate an environment handle */ if (rc != SQL_SUCCESS ) check_error (*henv, *hdbc, SQL_NULL_HSTMT, rc); rc = SQLAllocConnect (*henv, hdbc); /* allocate a connection handle */ if (rc != SQL_SUCCESS ) check_error (*henv, *hdbc, SQL_NULL_HSTMT, rc); printf("Enter Server Name:\n"); gets(server); printf("Enter User Name:\n"); gets(uid); printf("Enter Password Name:\n"); gets(pwd); if (uid[0] == '\0') { rc = SQLConnect (*hdbc, server, SQL_NTS, NULL, SQL_NTS, NULL, SQL_NTS); if (rc != SQL_SUCCESS ) check_error (*henv, *hdbc, SQL_NULL_HSTMT, rc); } else { rc = SQLConnect (*hdbc, server, SQL_NTS, uid, SQL_NTS, pwd, SQL_NTS); if (rc != SQL_SUCCESS ) check_error (*henv, *hdbc, SQL_NULL_HSTMT, rc); } }/* end initialize */ /******************************************************************* ** terminate ** - disconnect ** - free connection handle ** - free environment handle *******************************************************************/ int terminate(SQLHENV henv, SQLHDBC hdbc) { SQLRETURN rc; rc = SQLDisconnect (hdbc); /* disconnect from database */ if (rc != SQL_SUCCESS ) print_error (henv, hdbc, SQL_NULL_HSTMT); rc = SQLFreeConnect (hdbc); /* free connection handle */ if (rc != SQL_SUCCESS ) print_error (henv, hdbc, SQL_NULL_HSTMT); rc = SQLFreeEnv (henv); /* free environment handle */ if (rc != SQL_SUCCESS ) print_error (henv, SQL_NULL_HDBC, SQL_NULL_HSTMT); }/* end terminate */ /******************************************************************* ** display_results - displays the selected character fields ** ** - for each column ** - get column name ** - bind column ** - display column headings ** - fetch each row ** - if value truncated, build error message ** - if column null, set value to "NULL" ** - display row ** - print truncation message ** - free local storage ** *******************************************************************/ void display_results(SQLHSTMT hstmt, SQLSMALLINT nresultcols) { SQLCHAR colname[32]; SQLSMALLINT coltype[MAXCOLS]; SQLSMALLINT colnamelen; SQLSMALLINT nullable; SQLINTEGER collen[MAXCOLS]; SQLSMALLINT scale; SQLINTEGER outlen[MAXCOLS]; SQLCHAR * data[MAXCOLS]; SQLCHAR errmsg[256]; SQLRETURN rc; SQLINTEGER i; SQLINTEGER displaysize; for (i = 0; i < nresultcols; i++) { SQLDescribeCol (hstmt, i+1, colname, sizeof (colname), &colnamelen, &coltype[i], &collen[i], &scale, &nullable); /* get display length for column */ SQLColAttributes (hstmt, i+1, SQL_DESC_PRECISION, NULL, 0 , NULL, &displaysize); /* set column length to max of display length, and column name length. Plus one byte for null terminator */ collen[i] = max(displaysize, collen[i]); collen[i] = max(collen[i], strlen((char *) colname) ) + 1; printf ("%-*.*s", collen[i], collen[i], colname); /* allocate memory to bind column */ data[i] = (SQLCHAR *) malloc (collen[i]); /* bind columns to program vars, converting all types to CHAR */ SQLBindCol (hstmt, i+1, SQL_C_CHAR, data[i], collen[i], &outlen[i]); } printf("\n"); /* display result rows */ while ((rc = SQLFetch (hstmt)) != SQL_NO_DATA_FOUND) { errmsg[0] = '\0'; for (i = 0; i < nresultcols; i++) { /* Build a truncation message for any columns truncated */ if (outlen[i] >= collen[i]) { sprintf ((char *) errmsg + strlen ((char *) errmsg), "%d chars truncated, col %d\n", outlen[i]-collen[i]+1, i+1); } if (outlen[i] == SQL_NULL_DATA) printf ("%-*.*s", collen[i], collen[i], "NULL"); else printf ("%-*.*s", collen[i], collen[i], data[i]); } /* for all columns in this row */ printf ("\n%s", errmsg); /* print any truncation messages */ } /* while rows to fetch */ /* free data buffers */ for (i = 0; i < nresultcols; i++) { free (data[i]); } }/* end display_results /******************************************************************* ** SUPPORT FUNCTIONS ** - print_error - call SQLError(), display SQLSTATE and message ** - check_error - call print_error ** - check severity of Return Code ** - rollback & exit if error, continue if warning *******************************************************************/ /*******************************************************************/ int print_error (SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt) { SQLCHAR buffer[SQL_MAX_MESSAGE_LENGTH + 1]; SQLCHAR sqlstate[SQL_SQLSTATE_SIZE + 1]; SQLINTEGER sqlcode; SQLSMALLINT length; while ( SQLError(henv, hdbc, hstmt, sqlstate, &sqlcode, buffer, SQL_MAX_MESSAGE_LENGTH + 1, &length) == SQL_SUCCESS ) { printf("\n **** ERROR *****\n"); printf(" SQLSTATE: %s\n", sqlstate); printf("Native Error Code: %ld\n", sqlcode); printf("%s \n", buffer); }; return; } /*******************************************************************/ int check_error (SQLHENV henv, SQLHDBC hdbc, SQLHSTMT hstmt, SQLRETURN frc) { SQLRETURN rc; print_error(henv, hdbc, hstmt); switch (frc){ case SQL_SUCCESS : break; case SQL_ERROR : case SQL_INVALID_HANDLE: printf("\n ** FATAL ERROR, Attempting to rollback transaction **\n"); rc = SQLTransact(henv, hdbc, SQL_ROLLBACK); if (rc != SQL_SUCCESS) printf("Rollback Failed, Exiting application\n"); else printf("Rollback Successful, Exiting application\n"); terminate(henv, hdbc); exit(frc); break; case SQL_SUCCESS_WITH_INFO : printf("\n ** Warning Message, application continuing\n"); break; case SQL_NO_DATA_FOUND : printf("\n ** No Data Found ** \n"); break; default : printf("\n ** Invalid Return Code ** \n"); printf(" ** Attempting to rollback transaction **\n"); SQLTransact(henv, hdbc, SQL_ROLLBACK); terminate(henv, hdbc); exit(frc); break; } return(SQL_SUCCESS); }
发表评论
-
(转)浅谈IBM DB2的数据库备份与恢复
2011-11-23 16:41 1855http://bzhang.mild.blog.163.com ... -
(转)DB2备份恢复数据库步骤
2011-11-23 16:23 956http://tech.it168.com/ibmtec ... -
(转)DB2 SQL Error: SQLCODE=-964, SQLSTATE=57011的原因及解决方法
2011-11-07 15:03 9648http://blog.sina.com.cn/s ... -
(转)DB2解决“数据库日志已满”操作 SQLCODE=-964
2011-11-07 14:49 2699http://www.db2china.ne ... -
(转)用哪个DB2命令查看DB2 instance是启动还是停止的?
2011-09-30 13:25 3656http://bbs.chinaunix.net/thre ... -
(转)论 LOAD 与 IMPORT 中的 codepage 转换
2011-07-11 14:55 1169http://www.ibm.com/develo ... -
(转)DB2导出数据库表结构和数据
2011-07-11 14:19 1576http://hi.baidu.com/mylovecha ... -
(转)DB2 9 中基于字符的字符串函数
2011-06-16 11:32 1440http://www.ibm.com/develo ... -
(转)db2look:生成 DDL 以便重新创建在数据库中定义的对象
2011-05-31 14:56 1653http://blog.csdn.net/hrfdotnet/ ... -
(转)【俊哥儿张】DB2:学习 DB2LOOK 命令
2011-05-31 14:54 1418http://space.itpub.net/770528 ... -
(转)Recreate optimizer access plans using db2look
2011-05-31 14:53 1278http://www.ibm.com/develo ... -
(转)DB2中ALTER TABLE为什么需要REORG操作?
2011-05-12 13:10 1692http://www.flatws.cn/article/ ... -
(转)DB2 3.2.2 表空间维护
2011-05-11 12:53 1188http://book.51cto.com/art/2 ... -
(转)DB2 数据类型
2011-05-11 12:52 4012http://hi.baidu.com/uvvv/blog ... -
(转)DB2 Basics: Table spaces and buffer pools
2011-05-06 15:29 1483http://www.ibm.com/develo ... -
(转)SQL1092N "USER" does not have the authority to perform therequested command -
2011-03-23 17:39 5490http://dbaspot.com/foru ... -
(转)DB2 sqlstate 57016 原因码 "7"错误详解
2011-03-07 17:38 1505http://www.db2china.net/clu ... -
(转)在英语 OS 上设置 DB2 UDB 版本 8 中的混合字节字符集(MBCS)数据库
2011-02-16 16:25 1611http://www.ibm.com/develo ... -
(转)DB2 CODEPAGE List
2011-02-15 15:15 1434http://www.db2china.net/hom ... -
(转)快速参考: DB2 命令行处理器(CLP)中的常用命令
2010-11-11 10:44 978http://www.ibm.com/develo ...
相关推荐
2. **SQL语法与编程**:深入讲解SQL语言在DB2 UDB中的应用,包括DML(数据操纵语言)、DDL(数据定义语言)和DCL(数据控制语言),以及PL/SQL过程语言的使用。 3. **JDBC与ODBC连接**:解释如何通过Java JDBC驱动...
本文将深入探讨如何在DB2中创建和调用自定义函数,通过具体的示例代码,展示这一过程的关键步骤。 ### 创建自定义函数:理论与实践 在DB2中创建自定义函数涉及以下几个关键步骤: 1. **编写源代码**:首先,你...
`db2`命令行实用程序提供了丰富的交互式和非交互式选项,如`db2 connect`, `db2 select`, `db2 runstats`等。 通过阅读《DB2 UDB SQL入门》这本书,读者将能够掌握DB2 UDB的基础知识,熟练运用SQL进行数据库操作,...
2. **SQL(Structured Query Language)**:SQL是用于管理关系数据库的标准语言,DB2 UDB完全支持SQL,包括DDL(数据定义语言)用于创建和修改数据库结构,DML(数据操纵语言)用于插入、更新和删除数据,以及DCL...
文章通过解释什么是包、什么是段条目,以及它们如何交互,揭示了DB2 UDB处理SQL语句的内部机制。用户提交的SQL请求在被DB2 UDB处理时,首先会关联到一个包,然后根据包的结构信息进行SQL语句的编译和执行。编译和...
综上所述,本文档不仅详细介绍了DB2 UDB的基本概念和技术特点,还提供了从MySQL到DB2 UDB的迁移规划、实施步骤以及实际案例分析等内容。通过阅读本文档,用户可以系统地了解整个迁移过程,并能够顺利完成迁移工作。
- DB2 LUW 和 UDB400 在 SQL 语言元素的支持上可能存在差异。 - 移植过程中需要审查现有的 SQL 语句,并评估它们在 UDB400 上的兼容性。 - 如果存在不兼容的问题,可能需要调整 SQL 语句或者寻找其他方法来实现相同...
3. SQL支持:DB2 UDB完全支持SQL标准,包括DML(数据操纵语言)、DDL(数据定义语言)和DCL(数据控制语言),使得用户可以通过SQL语句进行数据查询、插入、更新和删除等操作。 4. 安全性:DB2 UDB提供了一套完善的...
- **数据转换**:探讨如何利用SQL函数和操作符进行数据转换,以满足特定需求。 - **数据汇总与聚合**:讲解如何使用聚合函数(如SUM、AVG、COUNT等)对数据进行汇总统计。 ##### 3. 存储过程编写 - **基本概念**:...
DB2 Universal Database (UDB) 9.1 for AIX 是一款在IBM AIX操作系统上运行的关系型数据库管理系统,提供了高级的数据管理和分析功能。这篇安装指南详细介绍了在AIX环境下安装和配置DB2 UDB v9.1的全过程,适合具有...
最后,第四部分(Vol 4)可能讨论了更高级的主题,如触发器、自定义函数和存储过程的安全性。这可能包括权限管理,确保只有授权的用户能够访问和修改特定的存储过程。此外,还可能涉及到性能优化,如索引策略、查询...
DB2 UDB安全模型主要包括两部分:身份验证和授权。身份验证就是使用安全机制验证所提供用户ID和口令的过程。用户和组身份验证由DB2 UDB外部的设施管理,比如操作系统、域控制器或者Kerberos安全系统。这和其他数据库...
理解DB2 UDB的内存模型对于数据库管理员和开发人员来说至关重要,因为它直接影响到数据库的响应速度和系统资源的利用效率。 DB2 UDB的内存结构主要由以下几个关键组件构成: 1. **数据缓冲池(Buffer Pool)**:这...
DB2 Universal Database(UDB)是IBM公司推出的一款企业级关系型数据库管理系统,广泛应用于大型企业和组织。本培训资料详尽地涵盖了DB2 UDB的关键概念、操作和管理技巧,旨在帮助学习者全面掌握这款强大的数据库...
作者 Paul Zikopoulos 通过一个对比列表,让读者可以轻松地理解分布式 IBM:registered: DB2:registered: Universal Database:trade_mark: (DB2 UDB) 服务器家族各成员之间,在基本许可规则、功能以及特性等方面的...
根据给定的信息,本文将详细解释“IBM DB2 UDB for AS400 SQL Programming”的核心概念和技术要点,包括但不限于数据库结构、SQL语句类型、SQL对象等方面。 ### 关于DB2 UDB for AS400 SQL编程 IBM DB2 Universal ...
DB2 Universal Database (UDB) Express Edition 是针对中小企业的关系数据库管理系统(Relational ...DB2 UDB Express 运行于 Linux 和 Windows 之上,至多可支持两个处理器和一些特性,具备自调优和自配置功能。
- **交互式调用**:在命令行或图形界面工具中直接输入SQL语句进行执行。 ##### 3. SQL控制语句 - **ALLOCATE CURSOR**:创建游标,以便能够逐行访问查询结果。 - **ALTER BUFFERPOOL**:调整缓冲池大小和其他参数,...