时间:2021-07-01 10:21:17 帮助过:6人阅读
但是使用存储过程至少有两个最明显的优点:速度和效率。使用存储过程的速度显然更快。在效率上,如果应用一次需要做一系列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 调用Oracle的存储过程详解的详细内容,更多请关注Gxl网其它相关文章!