Nic*_*oul 1 c++ oracle oracle-pro-c
我有一些遗留的Pro*C代码使用下面的结构.
这种模式可以在在线论坛上找到,但在Oracle文档中没有.
特别是,Google无法在Oracle网站上找到任何关于"sqhsts"的文档.
这种模式是否记录在某处?
它被认为是一种很好的编程习惯吗?
/* cud (compilation unit data) array */
static const short sqlcud0[] =
{10,4130,832,0,0,
5,0,0,1,0,0,27,23,0,0,4,4,0,1,0,1,97,0,0,1,97,0,0,1,97,0,0,1,10,0,0,
36,0,0,2,30,0,4,25,0,0,1,0,0,1,0,2,97,0,0,
};
/* EXEC SQL CONNECT :user IDENTIFIED BY :pwd USING :url; */
{
struct sqlexd sqlstm;
sqlstm.sqlvsn = 10;
sqlstm.arrsiz = 4;
sqlstm.sqladtp = &sqladt;
sqlstm.sqltdsp = &sqltds;
sqlstm.iters = (unsigned int )10;
sqlstm.offset = (unsigned int )5;
sqlstm.cud = sqlcud0;
sqlstm.sqlest = (unsigned char *)&sqlca;
sqlstm.sqlety = (unsigned short)256;
sqlstm.occurs = (unsigned int )0;
sqlstm.sqhstv[0] = ( void *)user;
sqlstm.sqhstl[0] = (unsigned int )0;
sqlstm.sqhsts[0] = ( int )0;
sqlstm.sqindv[0] = ( void *)0;
sqlstm.sqinds[0] = ( int )0;
sqlstm.sqharm[0] = (unsigned int )0;
sqlstm.sqadto[0] = (unsigned short )0;
sqlstm.sqtdso[0] = (unsigned short )0;
sqlstm.sqhstv[1] = ( void *)pwd;
sqlstm.sqhstl[1] = (unsigned int )0;
sqlstm.sqhsts[1] = ( int )0;
sqlstm.sqindv[1] = ( void *)0;
sqlstm.sqinds[1] = ( int )0;
sqlstm.sqharm[1] = (unsigned int )0;
sqlstm.sqadto[1] = (unsigned short )0;
sqlstm.sqtdso[1] = (unsigned short )0;
sqlstm.sqhstv[2] = ( void *)url;
Run Code Online (Sandbox Code Playgroud)
(从这里复制的代码,但与我的相似)
Pro*C从语句中创建低级别C
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
Run Code Online (Sandbox Code Playgroud)
这会为您声明的每个数据项创建类似OCI的描述符.EXEC SQL ...;然后,使用declare部分中编码的内容将其中使用这些绑定变量嵌入sql的其他语句()转换为较低级别的调用.Pro*C很旧.我参与了25年前Pro*C的第一次测试....不建议.
当启用警告的现代编译器编译时,Pro*C预编译生成的代码并不总是完美.它也不是可读的.如果您想学习OCI编程,您可以了解正在发生的事情.除非你想做一些特殊的任务,否则也不是真的推荐.
示例任务:OCI用于为Oracle创建外部C/C++库.它几乎可以让你在oracle中以几乎任何你想做的事情处理细粒度.从这里开始:
http://www.oracle.com/technetwork/database/features/oci/index.html
| 归档时间: |
|
| 查看次数: |
1765 次 |
| 最近记录: |