用PHP调用Oracle存储过程


Posted in PHP onOctober 09, 2006

PHP程序访问数据库,完全可以使用存储过程,有人认为使用存储过程便于维护
不过仁者见仁,智者见智,在这个问题上,偶认为使用存储过程意味着必须要DBA和开发人员更紧密配合,如果其中一方更变,则显然难以维护。
但是使用存储过程至少有两个最明显的优点:速度和效率。
使用存储过程的速度显然更快。
在效率上,如果应用一次需要做一系列SQL操作,则需要往返于PHP与ORACLE,不如把该应用直接放到数据库方以减少往返次数,增加效率。
但是在INTERNET应用上,速度是极度重要的,所以很有必要使用存储过程。
偶也是使用PHP调用存储过程不久,做了下面这个列子。

代码:--------------------------------------------------------------------------------

//建立一个TEST表
CREATE TABLE TEST (
  ID        NUMBER(16)        NOT NULL,
  NAME      VARCHAR2(30)      NOT NULL,
  PRIMARY KEY (ID)
);

//插入一条数据
INSERT INTO TEST VALUES (5, 'PHP_BOOK');

//建立一个存储过程
CREATE OR REPLACE PROCEDURE PROC_TEST (
  p_id IN OUT NUMBER,
  p_name OUT VARCHAR2
) AS
BEGIN
  SELECT NAME INTO p_name
    FROM TEST
    WHERE ID = 5;
END PROC_TEST;
/

--------------------------------------------------------------------------------

 

PHP代码:--------------------------------------------------------------------------------

<?php

//建立数据库连接
$user = "scott";                //数据库用户名
$password = "tiger";            //密码
$conn_str = "tnsname";          //连接串(cstr : Connection_STRing)
$remote = true                  //是否远程连接
if ($remote) {
  $conn = OCILogon($user, $password, $conn_str);
}
else {
  $conn = OCILogon($user, $password);
}

//设定绑定
$id = 5;                        //准备用以绑定的php变量 id
$name = "";                     //准备用以绑定的php变量 name

/** 调用存储过程的sql语句(sql_sp : SQL_StoreProcedure)
 *  语法:
 *      BEGIN 存储过程名([[:]参数]); END;
 *  加上冒号表示该参数是一个位置
**/
$sql_sp = "BEGIN PROC_TEST(:id, :name); END;";

//Parse
$stmt = OCIParse($conn, $sql_sp);

//执行绑定
OCIBindByName($stmt, ":id", $id, 16);           //参数说明:绑定php变量$id到位置:id,并设定绑定长度16位
OCIBindByName($stmt, ":name", $name, 30);

//Execute
OCIExecute($stmt);

//结果
echo "name is : $name<br>";

?>

 

PHP 相关文章推荐
PHP parse_url 一个好用的函数
Oct 03 PHP
php中的PHP_EOL换行符详细解析
Oct 26 PHP
PHP包含文件函数include、include_once、require、require_once区别总结
Apr 05 PHP
php实现字符串反转输出的方法
Mar 14 PHP
PHP中list()函数用法实例简析
Jan 08 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
php 类中的常量、静态属性、非静态属性的区别
Apr 09 PHP
利用PHP获取访客IP、地区位置、浏览器及来源页面等信息
Jun 27 PHP
PHP实现的各类hash算法长度及性能测试实例
Aug 27 PHP
使用composer 安装 laravel框架的方法图文详解
Aug 02 PHP
PHP实现文件上传与下载
Aug 28 PHP
php swoft框架实例用法
Dec 22 PHP
不用GD库生成当前时间的PNG格式图象的程序
Oct 09 #PHP
用定制的PHP应用程序来获取Web服务器的状态信息
Oct 09 #PHP
PHP在Web开发领域的优势
Oct 09 #PHP
优化NFR之一 --MSSQL Hello Buffer Overflow
Oct 09 #PHP
风格模板初级不完全修改教程
Oct 09 #PHP
如何对PHP程序中的常见漏洞进行攻击
Oct 09 #PHP
PHP安全配置
Oct 09 #PHP
You might like
php unset全局变量运用问题的深入解析
2013/06/17 PHP
PHP多文件上传实例
2015/07/09 PHP
range 标准化之获取
2011/08/28 Javascript
基于JQUERY的多级联动代码
2012/01/24 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
JS制作简单的三级联动
2015/03/18 Javascript
javascript常用函数(2)
2015/11/05 Javascript
简单模拟node.js中require的加载机制
2016/10/27 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
Bootstrap源码解读模态弹出框(11)
2016/12/28 Javascript
ES6中Proxy代理用法实例浅析
2017/04/06 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
微信小程序wx.request的简单封装
2019/11/13 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
matplotlib设置legend图例代码示例
2017/12/19 Python
python 寻找优化使成本函数最小的最优解的方法
2017/12/28 Python
python 多维切片之冒号和三个点的用法介绍
2018/04/19 Python
Python中拆分字符串的操作方法
2019/07/23 Python
python实现连连看游戏
2020/02/14 Python
parser.add_argument中的action使用
2020/04/20 Python
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
简述进程的启动、终止的方式以及如何进行进程的查看
2014/02/20 面试题
后勤副校长自我鉴定
2013/10/13 职场文书
满月酒主持词
2014/03/27 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
党员志愿者活动总结
2014/06/26 职场文书
大学生万能检讨书范例
2014/10/04 职场文书
师德自我剖析材料范文
2014/10/06 职场文书
应届毕业生自荐信
2015/03/04 职场文书
结婚通知短信大全
2015/04/17 职场文书
安全生产感想
2015/08/07 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
2021/06/26 Python
详解SQL的窗口函数
2022/04/21 Oracle