数据库 Proc编程一

proc编程
嵌入式sql:sql写入到C语言程序中

proc编程头文件路径
app\xxx\product\11.2.0\dbhome_1\precomp\public

proc编程要注意proc编译器也会使用gcc编译器中的头文件,所以需要在proc编译器中进行配置,加上系统的头文件路径
配置文件路径是:app\xxx\product\11.2.0\dbhome_1\precomp\admin\pcscfg.cfg

proc开发流程

1.proc工具预编译 *.pc==>.c
proc编译选项:parse=full|none(default full for C,others for c++) code=ANSI_C|CPP(default ansi_c)
C语言编译:proc 源文件 生成文件
c++编译:proc  源文件 生成文件 parse=none code=cpp
2.linux下编译gcc -o dm01_hello dm01_hello.c -I/home/oracle_11/app/oracle/product/11.2.0/db_1/precomp/public     -L/home/oracle_11/app/oracle/product/11.2.0/db_1/lib  -lclntsh
--linux查看oracle错误码:oerr ora 错误码
3.执行应用程序

proc程序结构
include 头文件(c/c++ and pro*c/c++)
定义变量
定义函数
main
    连接数据库:connect
    SQL操作语句:EXEC SQL...
    处理异常:exception handler
    断开连接:EXEC SQL COMMIT.ROLLBACK WORK release
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "sqlca.h"

//先定义宿主变量(SQL变量)
EXEC SQL BEGIN DECLARE SECTION;
    char * serverid="scott/123456";
EXEC SQL END DECLARE SECTION;

void main()
{
    int ret=0;
    //C语言中使用宿主变量
    printf("serverid=%s\r\n",serverid);
    //连接数据库
    EXEC SQL connect:serverid;
    if(sqlca.sqlcode!=0)
    {
        ret=sqlca.sqlcode;
        printf("connect err :%d",ret);
        system("pause");
    }
    printf("connect ok!\r\n");
    //提交事务断开连接
    EXEC SQL commit release;
    printf("Oracle closed !\r\n");
    system("pause");
}
时间: 2024-10-10 04:48:12

数据库 Proc编程一的相关文章

数据库 Proc编程二

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include "sqlca.h" //连接数据库 /* EXEC SQL CONNECT {:user IDENTIFIED BY :oldpswd | :usr_psw } [[AT { dbname | :host_variable }] USING :conne

互联网并发编程一

线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的. 分析:当多个线程访问myThread的run方法时,以排队的方式进行处理(这里排对是按照CPU分配的先后顺序而定的),一个线程想要执行synchronized修饰的方法里的代码:1 尝试获得锁 2 如果拿到锁,执行synchronized代码体内容:拿不到锁,这个线程就会不断的尝试获得这把锁,直到拿到为止,而且是多个线程同时去竞争这把锁.(也就是会有锁竞争的问题) s

数据库 proc编程九

第一种动态sql EXEC SQL EXECUTE IMMEDIATE :psql; 1.仅适用于非select语句 2.嵌入SQL语句中不能包含输入宿主变量 void main() { EXEC SQL WHENEVER SQLERROR DO sqlerr(); EXEC SQL connect:serverid ; printf("connect ok!\r\n"); char buf[100]={0}; while(1) { memset(buf,0,sizeof(buf));

Python笔记6#面向对象高级编程一

▲__slots__ 当定义一个class并创建了一个class的实例之后,我们可以给该实例绑定任何属性和方法.这就是动态语言的灵活性. 实例代码如下: #定义一个类Student >>> class Student(object): ... pass ... #创建类Student的一个实例stu1 >>> stu1 = Student() #给实例绑定一个属性name >>> stu1.name = 'michael' >>> s

Java网络编程一:基础知识详解

网络基础知识 1.OSI分层模型和TCP/IP分层模型的对应关系 这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍. 2.七层模型与协议的对应关系 网络层   ------------     IP(网络之间的互联协议) 传输层   ------------     TCP(传输控制协议).UDP(用户数据报协议) 应用层   ------------     Telnet(Internet远程登录服务的标准协议和主要方式).FTP(文本传输协议).HTTP(超文本传送协议) 3

C#网络编程一:C#网络编程常用特性

特性一:委托 委托是C#语言中特有的概念,相当于C/C++中的函数指针,与C/C++中函数指针的不同之处是:委托是面向对象的.类型安全的和保险的,是引用类型.因此,对委托的使用要 "先定义.后声明,接着实例化.然后作为参数传递给方法,最后才能使用". 1.定义委托使用关键字delegate: delegate  void SomeDelegate(type1 para1,......typen paran); 2.声明委托: SomeDelegate  d; 3.实例化委托: d=ne

数据库 proc编程六

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <stdlib.h> #include <string.h> #include "sqlca.h" //指示变量:用来对宿主变量做说明 //指示变量作输入:当值-1,表示宿主变量是空值 //指示变量做输出:当值-1,表示返回的变量是空值 //语法格式:宿主变量 [indicator] 指示变量 其中indicator关键字可加可不加

Socket网络编程一

1.Socket参数介绍 A network socket is an endpoint of a connection across a computer network. Today, most communication between computers is based on the Internet Protocol; therefore most network sockets are Internet sockets. More precisely, a socket is a 

shell脚本编程一

脚本注释: 在shell脚本中,跟在(#)号后面的内容表示注释,用来对脚本进行注释说明,注释部分不会被执行,注释可自成一行,也可以跟在脚本命令后面与命令在同一行.开发脚本时,如果没有注释,其他人就很难理解脚本究竟在做什么,时间长了自己也会忘记.因此,我们要发发尽量养成为所做的工作(脚本等)书写注释习惯,不光是方便别人,也方便自己.否则,写完一个脚本后也许几天后就记不起脚本的用途了,在重新阅读也会浪费很多宝贵时间. 脚本的执行 Shell脚本的执行通常可以采用以下三种方式: 1)   Bash s