今天发现使用 PHP 调用 Oracle 存储过程总是出现这样的一个错误。
ORA-01008: not all variables bound
后来折腾了很久,发现是变量名写错了。
<?php $conn = oci_connect('SCOTT','TIGER') or die;// 建立连接 if (!$conn) { $e = oci_error(); print htmlentities($e['message']); exit; } $sql = 'BEGIN pack_gt_calc.Pro_gt_Confirm(:year, :week, :errno, :errmsg); END;'; // 查询语句 $stid = oci_parse($conn, $sql); // 配置SQL语句,准备执行 if (!$stid) { $e = oci_error($conn); print htmlentities($e['message']); exit; } // Bind the input parameter oci_bind_by_name($stid,':year',$year,32); // Bind the input parameter oci_bind_by_name($stid,':week',$week,32); // Bind the output parameter oci_bind_by_name($stid,':errno',$error,32); // Bind the output parameter,变量名 ermsg 写错了 oci_bind_by_name($stid,':ermsg',$errmsg,64); // Assign a value to the input $year = '2016'; $week = '4'; $r = oci_execute($stid); // 执行SQL。OCI_DEFAULT表示不要自动commit if(!$r) { $e = oci_error($stid); echo htmlentities($e['message']); exit; } echo "errmsg is : $error<br>"; echo "errmsg is : $errmsg<br>"; oci_close($conn); ?>
参考资源:http://www.oracle.com/technetwork/cn/articles/fuecks-sps-082839-zhs.html
原文链接:http://woqilin.blogspot.com/2016/05/php-oracle-not-all-variables-bound.html
相关推荐
Oracle存储过程是数据库编程的重要组成部分,它允许程序员在数据库中编写复杂的逻辑,执行多次使用的SQL语句和数据库操作。在PL/SQL(Procedural Language/Structured Query Language)环境中,Oracle存储过程集成了...
这将创建一个名为test的存储过程,该存储过程调用Java程序的modify方法。 四、创建触发器 最后,我们需要创建一个触发器来调用存储过程。我们可以使用CREATE TRIGGER语句来实现这一步骤。例如: ``` create or ...
在提供的文档中,提到了两种方法将数据批量插入Oracle存储过程:一种是通过.NET环境(C#)调用,另一种是通过Java环境。这两种方法都利用了数组作为参数来传递数据,从而避免了循环中的单条插入操作。 首先,我们来...
Oracle存储过程和触发器是数据库管理系统中的重要组成部分,它们在数据处理和业务逻辑实现中扮演着关键角色。在Oracle数据库中,存储过程是一组预先编译的SQL和PL/SQL语句,可以作为独立的单元执行,提高了代码的...
#### 五、使用存储过程的原因 1. **提高性能**:存储过程可以被编译并缓存,从而避免了每次执行时都需要重新解析 SQL 语句的过程,这可以显著提高执行速度。 2. **减少网络流量**:相比于发送多条 SQL 语句,发送一...
本教程提供了MySQL存储过程的基础知识,包括其定义、使用原因、结构、作用域、参数、错误处理、安全性、函数、元数据、编写技巧以及安装和配置方法。掌握这些知识对于开发者而言,将能够有效利用存储过程来提升...
《PRO C程序设计和ORACLE调用接口》是关于数据库编程的一个重要主题,主要探讨了如何使用C语言来与Oracle数据库进行交互。在IT行业中,数据库的高效管理和数据操作是关键任务之一,而PRO C(也称为Oracle Pro*C)...
Oracle触发器调用Java类是一种将业务逻辑扩展到数据库内部的方法,这在处理特定的数据操作时非常有用。本文档提供了一个具体的步骤示例,演示如何实现这一功能。 首先,我们需要将Java程序加载到Oracle数据库中。`...
python-oracledb的源码和使用示例代码, python-oracledb 1.0,适用于Python versions 3.6 through 3.10. Oracle Database; This directory contains samples for python-oracledb. 1. The schemas and SQL ...
通过调用存储过程,可以简化应用程序开发人员的工作流程,减少数据在网络间的传输次数,从而提高数据处理效率。存储过程类似于其他编程语言中的函数或方法,可以接收参数并返回值,适用于封装特定业务逻辑。 #### ...
5. **ORA-01008: not all variables bound** - **含义**:当PL/SQL块中有未绑定的变量时触发此错误。 - **原因**:可能是由于在执行PL/SQL块前没有正确地初始化变量。 - **解决方案**: - 确保所有使用的变量都...
这将创建一个名为 test 的存储过程,该过程将调用 OracleTriggerJava 类的 modify 方法。 最后,创建 trigger 可以使用以下命令: create or replace trigger gxy_trigger after insert on jkt_msg_2 for each row...
- 涉及PL/SQL的执行,包括存储过程、存储函数和匿名块的调用。 - 版本管理功能,如版本的基于版本的重定义(Edition-Based Redefinition, EBR)。 ### 9. 绑定变量和其他高级特性(Binding Variables and Advanced ...
### 知识点二:存储过程的创建与调用 在给定的部分内容中,可以看到创建存储过程的基本语法结构,例如: ```sql DELIMITER$$ CREATE PROCEDURE 存储过程名称() BEGIN -- SQL语句 END$$ DELIMITER; ``` 其中,`...
在SQL中,存储过程是一种预编译的SQL语句集合,它可以封装一系列的数据库操作,提高数据处理效率,同时提供更好的安全性和可重用性。本文将深入探讨SQL存储过程中的常用函数、游标用法以及日期函数。 一、字符函数 ...
调用存储过程的方法如下: ```sql EXECUTE procedure_name (parameter_values); ``` ##### 4.3 存储过程的优点 - **提高性能**:存储过程可以在服务器端执行,减少网络流量。 - **重用代码**:存储过程可以被多个...
这样,应用程序只需要调用存储过程并传入相应的分页参数,就能获取指定范围的记录。 值得注意的是,ROWNUM是在数据排序之后计算的,因此在使用`ORDER BY`子句时,会按照新的顺序计算ROWNUM。同时,Oracle的基于规则...
What This Book Does Not Cover Conventions Used in This Book Which Version? Resources Available at the Book's Web Site Using Code Examples Safari® Enabled How to Contact Us ...
Oracle是世界上最广泛使用的数据库管理系统之一,它拥有丰富的语法和功能,涵盖了从基本的SQL查询到复杂的存储过程和触发器。以下是对"Oracle词法大全"中包含的知识点的详细阐述: 1. **Oracle SQL语句**: - ...