EXEC SQL BEGIN DECLARE SECTION;
char m_db_link_name[]="Link";
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA;/******************************************************************
** FunctionName: GetColType
** Description: get a table column datatype
** Parameter:
** [in] const char *pTableName
** [in] const char *pColName
** [out] char *pColType
** Return:
** type: int
** code: 1 - success 0 - not found -1 - error
******************************************************************/
int GetColType(const char *pTableName, const char *pColName, char *pColType)
{ EXEC SQL BEGIN DECLARE SECTION;
VARCHAR ColType[10];
VARCHAR TableName[50];
VARCHAR ColName[50];
EXEC SQL END DECLARE SECTION;
strcpy((char *)TableName.arr,pTableName);
TableName.len=strlen(pTableName);
strcpy((char *)ColName.arr,pColName);
ColName.len=strlen(pColName);
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL AT :m_db_link_name SELECT data_type INTO :ColType
FROM dba_tab_columns
WHERE table_name=:TableName and column_name=:ColName;
ColType.arr[ColType.len]='\0';
strcpy(pColType,(char *)ColType.arr);
return 1;
notfound:
return 0;
sqlerror:
return -1;
}/******************************************************************
** FunctionName: OracleConnect
** Description: connect a oracle database
** Parameter:
** [in] const char *pUserName
** [in] const char *pPassWord
** [in] const char *pDbName
** Return:
** type: int
** code: 0 - success -1 - error
******************************************************************/
int OracleConnect(const char *pUserName, const char *pPassWord, const char *pDbName)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[128];
VARCHAR password[32];
VARCHAR db_name[20];
EXEC SQL END DECLARE SECTION;
strcpy((char *)username.arr,pUserName);
username.len=strlen(pUserName);
strcpy((char *)password.arr,pPassWord);
password.len=strlen(pPassWord);
strcpy((char *)db_name.arr,pDbName);
db_name.len=strlen(pDbName);
EXEC SQL WHENEVER SQLERROR GOTO connect_error; EXEC SQL CONNECT :username IDENTIFIED BY :password
AT :m_db_link_name USING :db_name; return 0;connect_error: return -1;
}/******************************************************************
** FunctionName: OracleDisConnect
** Description: disconnect a oracle database
** Parameter: none
** Return: int
******************************************************************/
int OracleDisConnect()
{
EXEC SQL COMMIT WORK RELEASE;
return 0;connect_error:
return -1;}数据库连接正常,可是在做查询时GetColType()返回-1(无法执行),(功能返回
指定表列的数据类型)请问高手问题出现在哪?
另外我断开连接该怎么做?上面的函数不行(我想是没有指定连接,可我用
EXEC SQL :m_db_link_name COMMIT WORK RELEASE;预编译出错)
char m_db_link_name[]="Link";
EXEC SQL END DECLARE SECTION;
EXEC SQL INCLUDE SQLCA;/******************************************************************
** FunctionName: GetColType
** Description: get a table column datatype
** Parameter:
** [in] const char *pTableName
** [in] const char *pColName
** [out] char *pColType
** Return:
** type: int
** code: 1 - success 0 - not found -1 - error
******************************************************************/
int GetColType(const char *pTableName, const char *pColName, char *pColType)
{ EXEC SQL BEGIN DECLARE SECTION;
VARCHAR ColType[10];
VARCHAR TableName[50];
VARCHAR ColName[50];
EXEC SQL END DECLARE SECTION;
strcpy((char *)TableName.arr,pTableName);
TableName.len=strlen(pTableName);
strcpy((char *)ColName.arr,pColName);
ColName.len=strlen(pColName);
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
EXEC SQL WHENEVER SQLERROR GOTO sqlerror;
EXEC SQL AT :m_db_link_name SELECT data_type INTO :ColType
FROM dba_tab_columns
WHERE table_name=:TableName and column_name=:ColName;
ColType.arr[ColType.len]='\0';
strcpy(pColType,(char *)ColType.arr);
return 1;
notfound:
return 0;
sqlerror:
return -1;
}/******************************************************************
** FunctionName: OracleConnect
** Description: connect a oracle database
** Parameter:
** [in] const char *pUserName
** [in] const char *pPassWord
** [in] const char *pDbName
** Return:
** type: int
** code: 0 - success -1 - error
******************************************************************/
int OracleConnect(const char *pUserName, const char *pPassWord, const char *pDbName)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR username[128];
VARCHAR password[32];
VARCHAR db_name[20];
EXEC SQL END DECLARE SECTION;
strcpy((char *)username.arr,pUserName);
username.len=strlen(pUserName);
strcpy((char *)password.arr,pPassWord);
password.len=strlen(pPassWord);
strcpy((char *)db_name.arr,pDbName);
db_name.len=strlen(pDbName);
EXEC SQL WHENEVER SQLERROR GOTO connect_error; EXEC SQL CONNECT :username IDENTIFIED BY :password
AT :m_db_link_name USING :db_name; return 0;connect_error: return -1;
}/******************************************************************
** FunctionName: OracleDisConnect
** Description: disconnect a oracle database
** Parameter: none
** Return: int
******************************************************************/
int OracleDisConnect()
{
EXEC SQL COMMIT WORK RELEASE;
return 0;connect_error:
return -1;}数据库连接正常,可是在做查询时GetColType()返回-1(无法执行),(功能返回
指定表列的数据类型)请问高手问题出现在哪?
另外我断开连接该怎么做?上面的函数不行(我想是没有指定连接,可我用
EXEC SQL :m_db_link_name COMMIT WORK RELEASE;预编译出错)
解决方案 »
- 提示 无效数字 不解
- 把access sql 变成Oracle 语句
- 如何做到按顺序累加?
- 如何通过程序配置oracle客户端?
- 如何用VC做Oracle的事务处理?
- 急!9i里的一个view的sql语句给我无意中修改了!如何恢复?
- 各位大侠,请教“未指定错误”怎么解决????急。
- SQL> startup mountORA-12514: TNS: 监听进程不能解析在连接描述符中给出的 SERVICE_NAME
- !!请问 这个SQL 语句该怎么写? 在SQL ,isnull(uuu,0) 可以这么写,但是在Oracle中出错,该怎么写呢?
- 给高手加分(IN Oracle's procedure)
- 专家救命!在线等待!
- (200分)在同一个数据库,两个相同字段的表a1、a2,a1软件系统使用,a2用于备份a1里的数据,如何建一个存储过程比较a1和a2里的数据,把a
我用的是system用户登陆,应该不会有问题吧
将xxxx替换成真正在程序中出现的值。declare
ColType varchar2(10);
TableName varchar2(50):='xxxx';
ColName varchar2(50):='xxxx';
begin
SELECT data_type INTO ColType
FROM dba_tab_columns
WHERE table_name=TableName and column_name=ColName;
end;
/我发现你的coltype的长度可能太小了,在dba_tab_columns中的data_type可是varchar2(106)!!你试试吧,看看是不是报变量长度不足的错误。