近期由于工作的需要,需要把现在程序进行优化,考虑到每个地区一个版本,维护的成本太大,难度太高,决定用存储过程或是脚本语言把各地区和业务相当的代码封装起来,这样,各个地区只需要修改各地的存储过程或是脚本语言即可,主程序只需要维护一份即可。先用oracle的存储过程实现了业务代码的封装,这个相对简单,大家可以参考plsql用户指南与参考。至于脚本语言,考虑到与C的交互性和易用性,决定用lua来编写。由于linux的环境相当多,相当复杂需要自己编lua库、luasql库(代码网上下载),然后再写代码,这期间需到了些问题,在此总结一下,避免他人重复劳动。

1:先需要在自己的linux平台上把lua库和luasql库编出来,地址如下:

然后按照下载源文件中的说明把库编出来,编lua时需要选择指定的平台,这个需要注意一下,由于我的平台是aix编译过程中一直报错,在网上找了一篇解决方案,终于编成功,具体请见:http://cuoss.asiainfo.com/forum/archiver/?tid-177.html,

2:库编成功后,开始写代码,具体c调用lua脚本语言的代码,网上相当多,这里简单列一下

#include"lua.h"

#include"lualib.h"

#include"lauxlib.h"

int main(int argc,char** argv)

{

lua_State *L;

if(NULL == (L = luaL_newstate()))

{

perror("luaL_newstate failed");

return -1;

}

luaopen_base(L);// 加载Lua基本库

luaL_openlibs(L);

if(luaL_loadfile(L, "./jxbureau.lua"))

{

perror("loadfile failed");

return -1;

}

lua_pcall(L, 0, 0, 0);

lua_getglobal(L, "bureau_base_proc");

int batchno = 347;

int bureatype = 1;

char sep[2] = "|";

int errorno = 1;

lua_pushinteger(L,batchno) ;

lua_pushinteger(L,bureatype) ;

lua_pushstring(L,sep);

if (lua_pcall(L, 3, 1, 0) != 0)

{

perror("lua_pcall failed");

}

printf("lua_pcall:%d",lua_tointeger(L,-1));

lua_pop(L,1);

lua_close(L);

return 0;

}

接着需要在jxbureau.lua文件中把函数bureau_base_proc写出来,函数bureau_base_proc中需要访问数据库,在C中直接用include把头文件加进来即可,在lua中需要用到require 或是package.loadlib两个api,经过自己的测试,在windows平台上,加进oracle连接库代码如下:

require "luasql.odbc"

env = assert (luasql.odbc())

dbcon = assert (env:connect("ngboss_dev_10gr2", "cp", "cp"))

在linux平台,加进oracle连接库代码如下:

assert(package.loadlib("libluasql_oci8D.so", "luaopen_libluasql_oci8")) //可以用命令"nm luasql.so |grep luaopen_"查看

env = assert (luasql.oci8())

dbcon = assert (env:connect("ngboss_dev_10gr2", "cp", "cp"))

这样的写法估计和luaSql的版本有关系,不同的版本都有不同的函数。

3 :luasql的sql语句写法,在linux和window平台上也有区别

在window平台下代码如下:

row = cur:fetch ({}, "a")

row.BATCH_NO // 这里数据库表的字段需要大写,其它字段类似

在linux平台下代码如下:

row = cur:fetch ({}, "a")

row.batch_no // 这里数据库表的字段需要小写,其它字段类似

4:数据主程序里需要访问数据库,lua脚本中也访问数据,这就分为两个事务了,程序里的事务和lua中的事务没办法合在一起,程序里需要commit,lua中的才能看到中间数据,才能接着走下去。

lua连接 oracle 数据库,关于lua操作oracle数据库问题总结相关推荐

  1. 数据库MySQL相关操作||创建数据库、显示所有数据库、切换数据库、显示数据库下的数据库表、删除数据库

    数据库MySQL相关操作||创建数据库.显示所有数据库.切换数据库.显示数据库下的数据库表.删除数据库 1,创建数据库 create databases mydb: 记得加:(分号) 2,显示所有数据 ...

  2. java操作oracle数据_Java jdbc操作oracle数据库的两种方式

    本文由广州疯狂软件java培训分享: 第一种应该是比较古老的方法了. Windows下采用JDBC-ODBC Bridge连接oracle数据库 1. 安装oracle客户端程序,在tnsnames. ...

  3. c 连接oracle 通用类,c#操作oracle,有没有相仿sqlhelp之类的通用操作类(6)

    当前位置:我的异常网» C# » c#操作oracle,有没有相仿sqlhelp之类的通用操作类 c#操作oracle,有没有相仿sqlhelp之类的通用操作类(6) www.myexceptions ...

  4. java制作oracle程序,Java程序操作Oracle两种方式之简单实现

    Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...

  5. oracle中数据文件创建,操作oracle中的数据文件

    收藏于http://dev.yesky.com/296/8090796.shtml Oracle数据库 中管理表空间和数据文件 数据库的三大组成部分:数据文件,控制文件,Redo日志. 表空间分为系统 ...

  6. tp5连接mongo和mysql_tp5(thinkPHP5)操作mongoDB数据库的方法

    本文实例讲述了tp5(thinkPHP5)操作mongoDB数据库的方法.分享给大家供大家参考,具体如下: 1.通过composer安装 composer require mongodb/mongod ...

  7. 数据库mysql常用操作_mysql数据库常用操作

    目前最流行的数据库: oracle.mysql.sqlserver.db2.sqline --:单行注释 #:也是单行注释 /* 注释内容*/:多行注释 mysql -uroot -p密码:登录mys ...

  8. python数据库实例_Python操作MySQL数据库9个实用实例

    用python连接mysql的时候,需要用的安装版本,源码版本容易有错误提示.下边是打包了32与64版本. MySQL-python-1.2.3.win32-py2.7.exe MySQL-pytho ...

  9. c web mysql数据库_C语言操作MySQL数据库

    原作者博客http://www.cnblogs.com/nliao/archive/2010/09/09/1822660.html 先看结构体 ---------------------------- ...

  10. php 显示数据库操作错误,php操作mysql数据库编码错误

    有两行相同的代码,来自不同的 php 文件,在对 MySql 数据库(UTF-8格式)操作时,一行代码正常,一行代码异常 代码1,异常 update ordersystem.product Set P ...

最新文章

  1. python将图像转换为8位单通道_Python OpenCV读取16位单通道图像并转换为8位灰度图显示...
  2. 平板python_Wacom平板电脑的Python示例
  3. 第17节 业务流程管理和重组
  4. CSDN创始人蒋涛:开源吞噬世界,得开发者得天下
  5. 职场有多少IT精英透支健康和生命?
  6. spring AOP 之一:spring AOP功能介绍
  7. mysql本身主从_Mysql主从复制
  8. 深度特征融合--add和concat【转载】
  9. strstr函数_leetcode第28题实现strStr()
  10. nvidia cuda工具包更新9.0版本记录
  11. c# —— 枚举和值的隐藏副作用
  12. JavaBean与Map相互转换
  13. 将ShaderToy中的Shader搬运到Unity
  14. objective-c 中的关联介绍
  15. ASP.NET MVC Framework体验(4):控制器
  16. 怎么视频抠图?一键AI智能抠图,这招你一定要学会
  17. 揭秘springboot集成tomcat原理
  18. dom影像图形成数字地形图_基于MapMatrix的数字正射影像图制作
  19. lsass.exe和smss.exe病毒专杀工具——即磁碟机病毒专杀工具(转载)
  20. R语言ggplot2可视化多项式曲线、多项式方程以及多项式模型评估指标R方:使用ploynom包拟合三阶多项式模型

热门文章

  1. chartjs 表格刷新
  2. Couldn't register com.zyg.ios.XXX with the bootstrap server. Error: unknown error code.
  3. 换晶振导致stm32串口数据飞码的解决办法
  4. jar文件运行时 Failed to load Main-Class manifest attribute from
  5. CAD格式转换大全你想要的转换格式这里都有
  6. 获取CSS中图片地址
  7. 线程小游戏制作的心得与体会
  8. jai_imageio-1.1-alpha.jar
  9. 神经网络为什么叫神经网络,神经网络的强大之处
  10. 如何使用DNSPod解析Freenom域名