当前位置:首页 » 数据仓库 » proc连接数据库
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

proc连接数据库

发布时间: 2022-05-09 14:14:30

A. 请教使用proc连接数据库

#define __PROC_C__#include "db.h"#undef __PROC_C__ /* 包含sql通讯区变量 */EXEC SQL INCLUDE sqlca; /* RELEASE_CURSOR=YES 使PROC 在执行完后释放与嵌入SQL有关资源 */ EXEC ORACLE OPTION (RELEASE_CURSOR = YES); /* 全局说明段 */EXEC SQL BEGIN DECLARE SECTION; VARCHAR db_name[32 + 1]; VARCHAR db_user[32 + 1]; VARCHAR db_pass[32 + 1]; VARCHAR db_name2[32 + 1]; VARCHAR db_user2[32 + 1]; VARCHAR db_pass2[32 + 1]; VARCHAR db_link2[32 + 1];EXEC SQL END DECLARE SECTION; /* 数据库是否连接成功的标志 */int g_DBConnected = 0;int g_DBConnected2 = 0; /* 连接数据库 */int DBConnect(const char *DBName, const char *DBUser, const char *DBPass){ /* 局部sqlca说明 */ struct sqlca sqlca; /* 返回值定义 */ int ret; /* 将形式参数赋到全局说明段中相应变量中 */ memset(db_name.arr, 0, sizeof(db_name.arr)); strncpy(db_name.arr, DBName, sizeof(db_name.arr) - 1); db_name.len = strlen(db_name.arr); memset(db_user.arr, 0, sizeof(db_user.arr)); strncpy(db_user.arr, DBUser, sizeof(db_user.arr) - 1); db_user.len = strlen(db_user.arr); memset(db_pass.arr, 0, sizeof(db_pass.arr)); strncpy(db_pass.arr, DBPass, sizeof(db_pass.arr) - 1); db_pass.len = strlen(db_pass.arr); /* 执行连接数据库的SQL语句 */ EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name; /* 判断SQL语句执行结果 */ if (sqlca.sqlcode == 0) { g_DBConnected = 1; ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } return ret;} /* 重连数据库 */int DBReconnect(){ /* 局部sqlca说明 */ struct sqlca sqlca; /* 返回值定义 */ int ret; /* 执行连接数据库的SQL语句 */ EXEC SQL CONNECT :db_user IDENTIFIED BY :db_pass USING :db_name; /* 判断SQL语句执行结果 */ if (sqlca.sqlcode == 0) { g_DBConnected = 1; ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } return ret;} /* 断开数据库连接 */int DBDisconnect(){ /* 局部sqlca说明 */ struct sqlca sqlca; /* 返回值定义 */ int ret; /* 释放操作 */ EXEC SQL COMMIT WORK RELEASE; /* 判断SQL语句执行结果 */ if (sqlca.sqlcode == 0) { ret = 0; } else if (sqlca.sqlcode > 0) { ret = -1; } else { ret = -1; } g_DBConnected = 0; return ret;}

B. PROC程序如何编译时不需要连接数据库校验

编译的时候要验证使用的object是否存在数据库中,不连接无法验证

C. linux远程连接数据库问题 proc

装客户端了么?
修改以下两个文件

tnsname.ora,和sqlnet.ora
sqlnet.ora 文件:
# Generated by Oracle configuration tools.
NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME)
tnsname.ora 文件:
MONTBLANC =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.167.237.18)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = caConnection)
)
)
sqlplus caUsername/caPassword@caConnection
看看能连上不?
程序不用改的。
我也是初学proc

#include "sqlca.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void sql_error(char *msg)
{
printf("\n%s %s\n", msg,(char *)sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK RELEASE;
exit(0);
}

int main() {
EXEC SQL INCLUDE sqlca;
EXEC ORACLE OPTION (RELEASE_CURSOR = YES);
EXEC SQL WHENEVER SQLERROR DO sql_error(" <ERROR> ");

EXEC SQL BEGIN DECLARE SECTION;
VARCHAR oraCN[30];
EXEC SQL END DECLARE SECTION;

strcpy(oraCN.arr,"caUsername/caPassword@caConnection");
oraCN.len = strlen(oraCN.arr);
oraCN.arr[oraCN.len]='\0';

EXEC SQL CONNECT :oraCN;
printf("\n [OK Connected!]\n");
return 0;
}

D. 使用navicat连接数据库时显示1146-table 'mysql.proc' doesn't exist,这个怎么解决

一、数据库的系统表丢失了。

考虑以下几种处理方式:

a. 从其它相同版本的mysql数据库导出个proc的数据通过命令行导入进去;

b. 或者拷贝下data/mysql/proc.frm, proc.MYD, proc.MYI 三个文件到你的数据库data/mysql/ 目录下,重启数据库;

c. 如果之前有数据库备份,提取出其中的mysql.proc表来导入。

二、如果是从其它环境导入或拷贝的,数据库的存储过程会受影响,需重建所有数据库下的存储过程。

E. 用pro*c/c++ 和qt creator工具让C++连接Oracle数据库的问题。

数据库连接作为一种资源,我们的应用必须对之进行行之有效的管理。我们在访问数据库的时候,一般传统上采用先建立连接,然后使用该连接访问数据库,在使用完毕后,关闭该连接。这是我们经常采用的方法。该方法的好处是使用简单,不用对连接进行任何管理。但随之带来的缺点也就出现了,在应用需要频繁访问数据库的时候,这种方法就会使程序的效率十分低下,甚至有时候是不能满足应用的需要的。随着数据库连接池技术出现了,我们的应用根据访问数据库的频率动态决定创建连接的数量,以及决定在适当的时刻可以关闭一些数据库连接,用以节省这种资源。笔者最近在参考了网上大量代码的同时,实现了如何利用Pro C++使用数据库连接池完成了多线程对oracle数据库的访问。本着来源于网络,共享与网络的精神,和大家共同探讨,其中笔者的大部分代码来源是黄剑锋先生的共享代码,在此深表感谢。实现的基本功能如下:1:可以设定最小的数据库连接数。2:可以设定最大的数据库连接数。3:当数据库某个连接空闲时间多长时间后,该连接池会自动断开连接以节省数据库连接资源。4:提供了每个连接被使用的次数接口,方便统计和分析各个连接的情况。5:提供了每个连接从上次访问完毕,懂查看的时候为止,已经空闲的时长,以秒为单位。6:可以动态访问数据库存储过程,即存储过程的名字可以动态变化的。

代码库:http://blog.csdn.net/wayneforever/article/details/9028901
望采纳,谢谢

F. c程序通过什么连接oracle

一般c语言连接oracle数据库通过使用oracle提供的OCI接口和PROC编程接口两种方式。
OCI方式纯粹是一些函数接口。
PROC是oracle提供的一种C与ORACLE
SQL的混合编程。程序(以.pc为后缀)编好之后,使用oracle提供的proc预编译程序,将pc文件编译成c文件(这一过程,相当于将SQL转换为OCI的接口),然后再使用c语言编译器生成可以执行文件。
OCI方式不容易入门,它拥有大量的接口函数,要很快熟悉它,非常难。但OCI方式的编程效率很高。
porc方式简单易用。可用于对性能要求不太高的项目。

G. 有关c语言的proc连接oracle数据库的问题

在main.pc的insert 函数前加上extern


extern void insert (char password_[6],char id_[20],int balance_);

H. proc怎么连接局域网上的oracle数据库

兄弟,问题解决了吗?我也碰到这个问题了,是怎么连接的?

I. 求助:Proc程序频繁连接Oracle 数据库会对Oracle产生什么影响对操作系统产生什么影响

Proc支持连接池吗? 如果支持的话,还是使用连接池吧。 频繁的连接数据库,如果程序有 Bug,或者是Oracle 本身的bug, 都可能引起内存泄漏。 如果是生产库的话,运行不了多久内存 可能就会耗光。 这不是危言耸听,我见过这样的事情。