`

Oracle 调试有返回值存储过程、参数绑定variable

 
阅读更多
SQL Plus 调试Oracle有返回值存储过程、参数绑定(variable :i)、





先建好表,然后写带输出参数的存储过程

CREATE OR REPLACE  PROCEDURE "MES"."MES_GETKEY" (KName IN
    VARCHAR2,KValue OUT VARCHAR2) AS
BEGIN

select KeyValue into KValue from MES_SYSTEMKEY where Keyname=KName;

end MES_GetKey;

然后SQL Plus中运行:

var c varchar2(50);  --或者 variable c varchar2(50)  --赋初值方法、exec :c := 'a' 、
exec MES.MES_GETKEY('PRODUCE_NO',:c)
PRINT c;

-- 注意、print 后只能接绑定变量、否则报错、

就可以看到输出结果了,如果用的是 PL/SQL Developer,在命令窗口(Command Window)运行即可



3、



oracle 绑定变量(bind variable)

oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.

一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,
严重的影响系统的规模的扩大(即限制了系统的并发行), 而且引起的问题不能通过增加内存条和cpu的数量来解决。
之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。

当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,
如果有的话只须执行软分析即可,否则就得进行硬分析。

而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。

绑定变量能够使得每次提交的sql语句都完全一样。


普通sql语句:
SELECT fname, lname, pcode FROM cust WHERE id = 674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;
含绑定变量的sql 语句:
SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;

Sql*plus 中使用绑定变量:
sql> variable x number;
sql> exec := 123;
sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;


pl/sql很多时候都会自动绑定变量而无需编程人员操心,即很多你写得sql语句都会自动利用绑定变量,如下例所示:
create or replace procedure dsal(p_empno in number)
as
begin
update emp
set sal=sal*2
where empno = p_empno;
commit;
end;
/

也许此时你会想要利用绑定变量来替代p_empno,但是这是完全没有必要的,因为在pl/sql中,引用变量即是引用绑定变量。

但是在pl/sql中动态sql并不是这样。

在vb,java以及其他应用程序中都得显式地利用绑定变量。
对于绑定变量的支持不仅仅限于oracle,其他RDBMS向SQLserver也支持这一特性。
但是并不是任何情况下都需要使用绑定变量,



下面是两种例外情况:
1.对于隔相当一段时间才执行一次的SQL语句,这是利用绑定变量的好处会被不能有效利用优化器而抵消
2.数据仓库的情况下。

分享到:
评论

相关推荐

    VB 调用oracle 带返回值的存储过程

    当使用VB与Oracle进行交互时,有时候我们需要调用Oracle中的存储过程,尤其是那些带有返回值的存储过程。下面将详细介绍如何在VB中实现这一操作。 首先,为了在VB中与Oracle数据库通信,我们需要引入Oracle的数据...

    关于有返回值的存储过程

    在实际应用中,有返回值的存储过程通常会使用输出参数或者SELECT语句来返回结果。例如,在MySQL中,可以定义一个存储过程,其中包含一个OUT参数,调用者可以通过这个参数获取存储过程的执行结果: ```sql DELIMITER...

    帆软报表Oracle存储过程解决storeParameter1参数试用插件

    总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。通过安装并配置这个插件,用户可以顺利地在帆软报表中调用不包含...

    用JDBC操作Oracle的存储过程返回值

    总的来说,使用JDBC操作Oracle的存储过程返回值涉及了JDBC的基本操作,包括加载驱动、建立连接、创建CallableStatement、设置参数、执行存储过程、获取返回值以及释放资源。理解这些步骤对于开发与Oracle数据库交互...

    如何oracle调试存储过程

    - **查看变量值**:在调试过程中,可以查看Variable List,了解当前作用域内的所有变量值,这对于理解程序执行状态至关重要。 #### 2. 添加调试信息 在存储过程的编写过程中,可以通过添加调试信息来帮助追踪执行...

    C#调用存储过程详解(带返回值、参数输入输出等)

    本文实例讲述了C#调用存储过程的方法。分享给大家供大家参考,具体如下: CREATE PROCEDURE [dbo].[GetNameById] @studentid varchar(8), @studentname nvarchar(50) OUTPUT AS BEGIN SELECT @studentname=...

    Oracle存储过程编写与调试

    在调试过程中,理解变量的生命周期、异常处理以及PL/SQL的逻辑结构至关重要。通过调试,我们可以更有效地找到代码中的错误,提高存储过程的质量和性能。 总之,Oracle存储过程的编写和调试是数据库开发中的关键技能...

    Oracle利用PLSQL调试存储过程

    Oracle利用PLSQL调试存储过程及创建存储过程结构

    pl sql developer调试存储过程及调试包中创建的存储过程

    PL/SQL Developer 调试存储过程是指使用 PL/SQL Developer 工具来调试 Oracle 数据库中的存储过程。调试存储过程可以帮助开发者快速地定位和解决存储过程中的错误,提高开发效率和代码质量。 在 PL/SQL Developer ...

    oracle 存储过程 函数 dblink

    ### Oracle存储过程、函数与DBLink详解 #### 一、Oracle存储过程简介 在Oracle数据库中,存储过程是一种预编译好的SQL代码集合,它可以接受输入参数、返回单个值或多个值,并能够执行复杂的数据库操作。存储过程...

    oracle调用存储过程

    调用Oracle存储过程是数据库管理中的常见任务,尤其对于需要执行大量数据处理或事务操作的场景。下面我们将详细探讨如何在Oracle中调用存储过程以及其相关知识点。 1. **创建存储过程**: 在Oracle中,你可以使用`...

    ORACLE存储过程最全教程

    Oracle存储过程是数据库管理系统Oracle中的一个关键特性,它允许开发者编写一组预编译的SQL和PL/SQL语句,以实现特定的业务逻辑或数据库操作。这篇教程将深入讲解Oracle存储过程的各个方面,帮助你从基础到高级全面...

    Spring访问传入数组参数的Oracle存储过程

    5. **处理结果**:如果存储过程有返回值或者输出参数,可以使用`registerOutParameter`和`getObject`方法获取。 `源码`标签表明我们将看到实际的代码示例,而`工具`标签暗示可能涉及到Spring框架的某些工具类。在这...

    Oracle定时执行存储过程

    Oracle 定时执行存储过程 Oracle 定时执行存储过程是一种高效的方式来执行存储过程,通过使用 Oracle 提供的 job 机制来实现。Job 机制允许开发者创建、计划和执行存储过程,实现自动化和批量处理。 Broken() ...

    oracle存储过程单步调试的方法

    Oracle存储过程的单步调试是数据库开发中必不可少的技能,它可以帮助开发者跟踪代码执行流程,定位并解决问题。本文将详细讲解如何在Oracle环境中进行存储过程的单步调试。 首先,要进行存储过程的调试,你需要在...

    C#调用oracle方法(包括调用存储过程)

    本文将详细介绍如何使用C#语言连接Oracle数据库,并演示如何调用Oracle存储过程,特别是带有输出参数的情况。这些知识点对于初学者来说尤为重要。 #### 前置知识 1. **C#基础**:理解C#的基本语法和概念。 2. **...

    Oracle+PlSql存储过程

    7. 使用Java调用Oracle存储过程分为三种情况:无返回值的过程、有单个返回值的过程和返回列表的过程。 **用Java调用Oracle存储过程总结** 1. 无返回值的存储过程:使用CallableStatement的`execute()`方法执行。 2....

    oracle存储过程学习经典入门

    本文将从 Oracle 存储过程的基础知识开始,逐步深入到 Oracle 存储过程的高级应用,包括 Hibernate 调用 Oracle 存储过程和 Java 调用 Oracle 存储过程的方法。 Oracle 存储过程基础知识 Oracle 存储过程是 Oracle...

    用callabledStatement调用oracle存储过程实用例子(IN OUT 传游标)

    首先,我们创建了一个名为 test 的存储过程,该存储过程有两个参数:s 和 p。s 是输入参数,p 是输出参数。存储过程的主要功能是从 student 表中查询密码,并删除该用户。 在 Java 中,我们使用 CallabledStatement...

Global site tag (gtag.js) - Google Analytics