Oracle使用PL/SQL操作COM对象

正在看的ORACLE教程是:Oracle使用PL/SQL操作COM对象。PL/SQL是由Oracle公司对标准SQL进行扩展,专用于Oracle数据库中程序设计的专用语言,属第三代过程式程序设计语言。从Oracle8开始提供了直接从PL/SQL中调用外部C语言过程,允许开发人员用PL/SQL进行使用C语言编制的程序模块。从Oracle8i开始,又引入了Java程序。

  在本文中主要介绍外部例程的基本原理以及使用条件,介绍如何通过引用外部例程来操作Windows中的COM对象,并做了一个操作Excel对象的示例。

  本文的运行环境全部建立在Oracle9i和Windows2000。其中ORACLE的安装目录(ORACLE_HOME)为D:\oracle\ora92,SID为ORADB,主机名为CHANET。

  必要性

  扩展后的PL/SQL语言已经集成了标准SQL,在效率和安全上非常适合设计Oracle数据库程序,但对于应用的某些功能,其它的程序设计语言比PL/SQL更适合,如:使用操作系统资源,C语言在计算和引用系统对象及使用设备上优于PL/SQL,而Java语言在网络上的应用优于PL/SQL。

  如果在应用上要用到不适合用PL/SQL语言的话,这时就要使用其它语言进行编制,然后由PL/SQL作为外部例程进行调用。

  在Oracle8之前的版本,PL/SQL和其它语言的唯一通信是借助于DBMS_PIPE和DBMS_ALERT包来实现,在使用之前必需建立一个OCI接口或预编译器编制的监护程序,使用比较复杂。外部例程的出现,只需在PL/SQL中建立一个函数映射到外部例程对应的函数,就像普通的PL/SQL函数使用一样,简化了使用过程。

  基本原理

  当引用外部C语言例程时,Oracle监听器将启动extproc进程,该进程将会动态地载入共享库(在Windows下称为动态链接库,即是DLL文件),进程起了一个缓冲的作用,当PL/SQL过程调用外部函数时,进程把命令发送到共享库,之后把结果返回给PL/SQL过程。

  进程被调用后随着共享库的使用会话(session)而存在,如果调用完毕或者关闭数据库用户会话,extproc进程会自动关闭。

  如下图1-1为调用外部例程的描述。

  使用配置

  在调用外部例程之前,必需进行如下设置:

  ·配置监听器。

  ·配置Net组件服务。

  配置监听器,打开D:\oracle\ora92\network\admin\listener.ora 文件,修改文件参数。

  其中有两部份参数对于使用外部例程是很重要的。

  ·(ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = extproc1))

  设置基于IPC协议的外部例程

  ·(SID_DESC =(SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oracle\ora92) (PROGRAM = extproc) )

  记录数据库的相关属性,SID_NAME在默认的情况下是PLSExtproc。

  配置Net组件服务,打开D:\oracle\ora92\network\admin\tnsnames.ora文件,把如下内容保存在该文件里。

  重要参数说明:

   ·(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))

   ·(CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO)

  两设置必需与listener.ora里的一致。

  重启监听器,并测试服务是否可用。

  停止监听器:lsnrctl stop

  启动监听器:lsnrctl start

  测试服务是否可用:

  已使用的参数文件:

  已使用 TNSNAMES 适配器来解析别名

  测试extproc进程是否正常:

  4、使用COM对象说明

  COM对象设计都会提供了三个基本操作给开发人员使用,分别为:获取属性值,设置属性值(只读属性除外),调用方法。Oracle数据库在Windows的平台下提供了操作COM对象的接口,属于C语言外部例程模式。

  工作原理如下图:

  在使用该功能之前,需明白如下内容:

  1) 创建COM对象操作函数。

  2)配置监听器。

  在listener.ora文件里,添加如下内容,并重启监听器。

  3) PL/SQL数据类型与对应的COM对象类型

  表1-1数据类型比较

  4) 函数说明。

  表1-2函数说明

时间: 2007-03-06

oracle查看会话锁定的所有对象代码分享

复制代码 代码如下: select session_id sid, owner, name, type, mode_held held, mode_requested request from DBA_DDL_LOCKS where session_id=(select sid from V$mystat where rownum=1) / (注:owner 列是所锁定对象的所有者)

基于Oracle的面向对象技术入门基础简析开发者网络Oracle

正在看的ORACLE教程是:基于Oracle的面向对象技术入门基础简析开发者网络Oracle.一.概述 对象是Oracle8i以上版本中的一个新的特性,对象实际是对一组数据和操作的封装,对象的抽象就是类.在面向对象技术中,对象涉及到以下几个重要的特性:  封装性 通过对数据和操作的封装,将用户关心的数据和操作暴露出来作为接口,其他数据和操作则隐藏到对象内部,这样便于用户使用和维护.  继承性 对象具有继承性,通过这一特性可以增强程序的可扩展性,适合大型项目的开发.  多态性 同一操作在运行时刻有

ORACLE 常用的SQL语法和数据对象

1.INSERT (往数据表里插入记录的语句) INSERT INTO 表名(字段名1, 字段名2, --) VALUES ( 值1, 值2, --); INSERT INTO 表名(字段名1, 字段名2, --) SELECT (字段名1, 字段名2, --) FROM 另外的表名; 字符串类型的字段值必须用单引号括起来, 例如: 'GOOD DAY' 如果字段值里包含单引号' 需要进行字符串转换, 我们把它替换成两个单引号''. 字符串类型的字段值超过定义的长度会出错, 最好在插入前进行长度

MS-sql 2005拒绝了对对象 'xxx' (数据库 'xxx',架构 'dbo')的 SELECT 权限的解决方法

问题:Sql server 2005 默认设置下不允许远程登陆 1 外围设置 tcp/ip 和 named pipe 同时启用 2 服务器 --〉属性 --〉安全性 --〉sql server 和windows 认证模式 问题: 拒绝了对对象 'xxx' (数据库 'xxx',架构 'dbo')的 SELECT 权限. 答案: 数据库(xxx) --->安全性---->架构---->dbo(属性)--->权限--->添加--->浏览--> [public]----

ORACLE 查询被锁住的对象,并结束其会话的方法

使用Oracle时,发现有表被锁,又不知道是谁(或者哪个程序)锁的,怎么办 ? 两步走: 1.查找出被锁对象的会话ID和序列号 执行如下SQL: -- 查询出被锁对象,并提供 kill 脚本 SELECT S.SID, S.MACHINE, O.OBJECT_NAME, L.ORACLE_USERNAME, L.LOCKED_MODE, S.OSUSESR, 'ALTER SYSTEM KILL SESSION '''|| S.SID || ', '|| S.SERIAL#||''';' AS

利用函数返回oracle对象表的三种方法

因为要返回表对象,无论后续用什么方法返回,都先要声明全局type:并且,字段变量类型要为object,不能为record: create or replace type t_test as object( EMPNO NUMBER(4), ENAME VARCHAR2(10), JOB VARCHAR2(9), SAL NUMBER(7,2) ); create or replace type t_test_table as table of t_test; 至于返回表对象的方法,目前发现三种:

解析Oracle数据库中的对象集合schema

搭建一个oracle,下面会有很多schema,每个schema下的数据都不影响. 感觉和mysql的库的概念很像,现在用的数据库管理系统其实也是这么划分的,mysql用的ip+port+库标识,oracle用ip+port+schema标识,平时还总听到一个实例的概念,我的理解就是实例就是一系列相关进程,代表了一个数据库服务.目前线上为了节省资源,常常把机器分成多个实例,用不同的端口号标识,每个实例上有多个schema. 旭哥跟我说的很形象,oracle一个实例上有对应多个库.mysql一个库

asp sqlserver 执行存储过程返回记录集报对象关闭时不允许操作

如果要得到返回值,需要用Command的方法. 首先说明,返回值有两种.一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样:另一种是可以返回多个值,存储这些值的变量名称需要在调用参数中先行指定. 这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?) 存储过程如下: 复制代码 代码如下: use pubs GO -- 建立存储过程 create procedure sp_PubsTest -- 定义三个参数变量,注意第三个,特别标记是用于输出

重新编译PLSQL中的无效对象或者指定的对象 的方法

Oracle   Tips,   Tricks   &   Scripts      1.   Topic:   Compiling   Invalid   Objects: Oracle8i   and   Oracle9i   provides   a   script   called   utlrp.sql   located   in   $ORACLE_HOME/rdbms/admin   which   can   be   used   anytime   to   recomp

PHP 5 数据对象 (PDO) 抽象层与 Oracle

一名新 PHP 数据对象 (PDO) 数据抽象层的原始开发人员为您简要介绍该抽象层,重点讲述与 Oracle 一起运行的情况. 需要 PHP:5.0需要其他:Oracle 8 或更高版本客户端库下载用于 Oracle 的 PDO (Windows):php_pdo.dll, php_pdo_oci.dll下载用于 Oracle 的 PDO (Unix):pdo, pdo_oci PDO 简介 PHP 主要是由志愿者完成的项目:尽管有少数一些固定的"核心"开发人员,但是我们没有一个人在全

PHP使用PDO抽象层获取查询结果的方法示例

本文实例讲述了PHP使用PDO抽象层获取查询结果的方法.分享给大家供大家参考,具体如下: PHP使用PDO抽象层获取查询结果,主要有三种方式: (1)PDO::query()查询. 看下面这段php代码: <?php //PDO::query()查询 $psql="SELECT * FROM user"; $res = $db->query($psql); $res->setFetchMode(PDO::FETCH_NUM); //数字索引方式 while ($row

PHP数据对象PDO操作技巧小结

本文实例讲述了PHP数据对象PDO操作技巧.分享给大家供大家参考,具体如下: PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. <?php try { $dsn = "mysql:host=localhost; port=3306; dbname=wsq_hotel; charset=utf-8"; $user = 'root'; $psw ='root'; $pdo = new PDO($dsn,$user,$psw); $sql = 'sele

PHP中关于PDO数据访问抽象层的功能操作实例

PDO:数据访问抽象层 具有三大特点: 1.可以访问其它数据库  所有数据库都可以 2.具有事务功能 3.带有预处理语句功能(防止SQL注入攻击) 实例操作代码如下: <?php //1.造PDO对象 $dsn ="mysql:dbname=mydb;host=localhost";//数据库类型:dbname=数据库名称;host=链接的ip或本机 $pdo =new PDO($dsn,"root","root");//$dsn,帐号,密

php数据库抽象层 PDO

下面就来介绍一下数据库抽象层PDO的使用: PDO(PHP Data Objects)是一个轻量级的PHP扩展,提供了一个数据访问抽象层.还要就是PDO只能在PHP5.0以上版本使用. 下面来介绍一下PDO常用的预定义常量: PDO::PARAM_BOOL (integer) 表示布尔数据类型 PDO::PARAM_NULL (integer) 表示数据类型为NULL的SQL PDO::PARAM_INT (integer)  表示为integer数据类型的SQL PDO::PARAM_STR 

php在数据库抽象层简单使用PDO的方法

本文实例讲述了php在数据库抽象层简单使用PDO的方法.分享给大家供大家参考,具体如下: 测试代码如下: <?php /************************** @Filename: pdotest.php @Content : PDO操作MySQL,Access(测试) **************************/ if($_GET['db'] == 'mysql') { $dns = 'mysql:host=localhost;dbname=test'; $dbuser

通过button将form表单的数据提交到action层的实例

form表单中不需要写action的路径,需要给form表单一个唯一的id,将你要提交的信息的表单中的标签name="action中的javabean对象.javabean属性".给button按钮添加一个onclick()点击事件,并实现该点击事件,在该onclick()方法中通过ajax将form表单中的数据提交给action层 JSP页面中的代码: <form id="handleform"> <!-- 根据学生id修改学生信息 -->

Vue监听数据对象变化源码

监听数据对象变化,最容易想到的是建立一个需要监视对象的表,定时扫描其值,有变化,则执行相应操作,不过这种实现方式,性能是个问题,如果需要监视的数据量大的话,每扫描一次全部的对象,需要的时间很长.当然,有些框架是采用的这种方式,不过他们用非常巧妙的算法提升性能,这不在我们的讨论范围之类. Vue 中数据对象的监视,是通过设置 ES5 的新特性(ES7 都快出来了,ES5 的东西倒也真称不得新)Object.defineProperty() 中的 set.get 来实现的. 目标 与官方文档第一个例

PHP实现的数据对象映射模式详解

本文实例讲述了PHP实现的数据对象映射模式.分享给大家供大家参考,具体如下: 还是代码说话:这里还是遵循策略模式的psr-0代码规范 数据表: 数据库连接文件Db.php(如果没有可以到前面一篇<PHP单例模式数据库连接类与页面静态化>里面找) 自动加载类文件Config.php(如果没有可以去上一篇<PHP策略模式>里拿过来) 入口文件DataUser.php <?php define('BASEDIR', __DIR__); //自动加载在本文件中没有被定义的类 requ