达梦(DM)数据库存储模块的调用

MoMo 2021年6月14日15:17:09
评论
205

存储模块的调用

调用存储模块的方法可以分为两种情况。

1. 立即调用

如果存储过程需要设置参数,那么在调用存储模块的时候就已经为所有的  ININOUT

类型的参数进行了赋值,带有 OUT 属性的参数的值是通过取得存储过程结果集的方法获取

的。立即执行存储过程的示例如下:

SQLExecDirect(hsmt,(SQLCHAR*)"call test_proc(123);",SQL_NTS);

2. 参数调用

这种调用方法指的是在调用模块的时候,其参数值用问号来代替,发送给服务器之后,

服务器返回参数的准备信息,用户依据服务器返回的参数描述信息进行参数绑定,然后执行,

其参数的处理方法与普通的参数处理方法相同。

DM 支持存储模块返回多个结果集的处理,多结果集的切换通过 SQLMoreResult 函数切

换,下面通过一个实例来说明如何使用。

#include <windows.h>

#include <stdio.h>

#include <sql.h>

#include <sqltypes.h>

#include <sqlext.h>

HENV env;

HDBC dbc;

HSTMT stmt;

RETCODEret;

short i;

short cols;

char   colname[129];

char   coldata[256];

void main(void)

{

SQLAllocHandle(SQL_HANDLE_ENV, NULL, &env);

SQLSetEnvAttr(env, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);

SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);

SQLConnect(dbc,   (SQLCHAR   *)"DM",   SQL_NTS,   (SQLCHAR   *)"SYSDBA",   SQL_NTS,   (SQLCHAR

*)"SYSDBA", SQL_NTS);

SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

SQLExecDirect(stmt, (SQLCHAR *)"drop table test_table1;", SQL_NTS);

SQLExecDirect(stmt, (SQLCHAR *)"drop table test_table2;", SQL_NTS);

SQLExecDirect(stmt, (SQLCHAR *)"create table test_table1 (t1col int);", SQL_NTS);

SQLExecDirect(stmt, (SQLCHAR *)"insert into test_table1 values(100);", SQL_NTS);

SQLExecDirect(stmt, (SQLCHAR *)"create table test_table2 (t2col varchar(10));", SQL_NTS);

SQLExecDirect(stmt, (SQLCHAR *)"insert into test_table2 values('hello!');", SQL_NTS);

SQLExecDirect(stmt, (SQLCHAR *)"create or replace procedure test_proc as begin select * from

test_table1;select * from test_table2;end;", SQL_NTS);

SQLExecDirect(stmt, (SQLCHAR *)"call test_proc;", SQL_NTS);

SQLNumResultCols(stmt, &cols);

for (i=1; i<=cols; i++)

{

SQLDescribeCol(stmt, i, (SQLCHAR *)colname, 129, NULL, NULL, NULL, NULL, NULL);

printf("%s ", colname);

}

printf("\n");

for ( ; ; )

{

ret = SQLFetch(stmt);

if (ret == SQL_NO_DATA_FOUND) break;

for (i=1; i<=cols; i++)

{

SQLGetData(stmt, i, SQL_C_CHAR, coldata, 256, NULL);

printf("%s ", coldata);

}

printf("\n");

}

SQLMoreResults(stmt);

SQLNumResultCols(stmt, &cols);

for (i=1; i<=cols; i++)

{

SQLDescribeCol(stmt, i, (SQLCHAR *)colname, 129, NULL, NULL, NULL, NULL, NULL);

printf("%s ", colname);

}

printf("\n");

for ( ; ; )

{

ret = SQLFetch(stmt);

if (ret == SQL_NO_DATA_FOUND) break;

for (i=1; i<=cols; i++)

{

SQLGetData(stmt, i, SQL_C_CHAR, coldata, 256, NULL);

printf("%s ", coldata);

}

printf("\n");

}

SQLFreeHandle(SQL_HANDLE_STMT, stmt);

SQLDisconnect(dbc);

SQLFreeHandle(SQL_HANDLE_DBC, dbc);

SQLFreeHandle(SQL_HANDLE_ENV, env);

}
https://xpanx.com/
MoMo
  • 本文由 发表于 2021年6月14日15:17:09
  • 转载请务必保留本文链接:https://xpanx.com/2943.html
飞书离职了怎么退出 飞书

飞书离职了怎么退出

一、功能简介 如果你是企业成员,当你被误拉入企业,或是从企业离职时,你可选择主动退出企业,也就是注销你在当前企业下的帐号。 注:退出企业后,你在该企业身份下所拥有的云文档等资源将自动流转给直属上级,无...
统信UOS怎么使用手机和电脑互传文件 统信UOS操作系统

统信UOS怎么使用手机和电脑互传文件

您可以使用统信UOS助手来实现手机与电脑间的跨端协作、高效传输以及实时同步。  说明:仅安卓手机支持安装统信UOS助手。 成功安装并登录统信UOS助手,设置好发现方式,通过扫码或搜索电脑将电脑与手机连...
统信UOS怎么给文件夹添加标记 统信UOS操作系统

统信UOS怎么给文件夹添加标记

通过给文件(夹)添加标记,可以更好地分类管理您的文件。  说明:仅x86平台支持标记信息功能。 方法一:通过编辑框添加标记,操作步骤如下: 右键单击文件(夹),选择 标记信息。 输入标记名称,若要添加...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: