我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle之绑定变量 2

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle之绑定变量 2

绑定变量(bind variable)我们经常在写plsql中用到,那我们承接上一节的来看看在plsql中静态sql和动态sql在绑定变量的区别

declare
    v_value_a varchar2(100);
    v_value_b varchar2(100);
    v_name  varchar2(50);
begin
    v_value_a := 'SMITH';
    select e.enameinto v_name from scott.emp e where e.ename = v_value_a;
    v_value_b := 'ALLEN';
    select e.enameinto v_name from scott.emp e where e.ename = v_value_b;
end;
/

查询v$sql

select * from v$sql d where d.SQL_TEXT like '%%';

Oracle之绑定变量 2

这里看到只产生了一条sql_id,oracle会自动把变量v_value_a,v_value_b换成绑定变量:B1.


再来看看动态sql

PLSQL_1:
declare
    v_value_a varchar2(100);
    v_value_b varchar2(100);
    v_name  varchar2(50);
begin
    v_value_a := 'SMITH';
    
    v_value_b := 'ALLEN';

    execute immediate 'select e.ename from scott.emp e where e.ename = :xxx' 
    using v_value_a;
    
    execute immediate 'select e.ename from scott.emp e where e.ename = :yyy' 
    using v_value_b;
end;
/

查询v$sql

select * from v$sql d where d.SQL_TEXT like '%%';

Oracle之绑定变量 2

这里可以看到动态sql就是以执行sql为文本进行解析的,如果两个sql有不同就是不同的sql语句。


2.获取绑定变量的值

那我们可以得到绑定的变量的值吗?通过v$sql_bind_capture就可以查询到

SQL_1:
select d.NAME, d.POSITION, d.SQL_ID, value_string
  from v$sql_bind_capture d
 where d.SQL_ID in
       (select sql_id from v$sql v where v.SQL_TEXT like '%%')

Oracle之绑定变量 2

这时我们看到绑定变量的值是上文看到的v_value_a和v_value_b的值。

接着往下走,改变v_value_a的值:

v_value_a := 'CLARK';

执行PLSQL_1,SQL_1

Oracle之绑定变量 2

绑定变量的值并没有发生变化,这时为什么呢?

  • v$sql_bind_capture这个视图是一个快照视图,并不会保存所有执行过的SQL的绑定变量,只会记录最近一次捕获到的绑定值,而已每次捕获都是有间隔时间的。ORACLE为我们提供了一个隐含参数_cursor_bind_capture_interval(默认900s),这个就是控制绑定变量抓取频率的参数。

  • 如果绑定变量是DATE类型则无法直接查看到的。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle之绑定变量 2

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle绑定变量

什么时绑定变量?Oracle中每一个提交的SQL语句都会经历解析,解析分为两种一种是软解析,这种解析在执行sql的时候直接到share pool中取出执行计划即 可,不是特别占用资源。而另一种硬解析,整个过程需要解析,制定执行路径,优化访问步骤等需要耗费大
Oracle绑定变量
2021-01-29

Oracle变量与绑定变量的区别

Oracle变量和绑定变量在Oracle数据库中有不同的用途和作用。变量(Variable):在PL/SQL中,变量是用来存储和操作数据的一种数据结构。变量可以在程序中声明并赋予初值,然后在程序中使用。在Oracle中,变量通常用于在PL/
Oracle变量与绑定变量的区别
2024-08-23

C#Oracle并非所有变量都已绑定

在C#中,Oracle数据库并不是所有变量都已绑定。在编写SQL查询时,可以使用绑定变量来代替具体的值,这样可以提高查询的性能和安全性。绑定变量是在SQL查询中使用":"符号定义的,后面跟着变量名。在执行查询之前,需要将这些绑定变量绑定到实
2023-08-18

MySQL中的游标和绑定变量

目录一、mysql游标简介二、绑定变量2.1 绑定变量的优化2.2 SQL接口的绑定变量2.3 绑定变量的限制一、MWhjsamNwaBySQL游标简介MySQL在服务器端提供只读的、单向的游标,而且只能在存储过程或者更底层的客户端API
2022-08-17

Gridview根据C#变量值绑定列值

在ASP.NET中,你可以使用GridView的`RowDataBound`事件来根据C#变量值动态绑定列的值。首先,在GridView的定义中,添加`OnRowDataBound`事件处理程序:```markup```然后,在代码behi
2023-09-27

PLSQL并非所有变量都已绑定

在PL/SQL中,所有变量并不都需要绑定。PL/SQL中的变量分为两种类型:绑定变量和未绑定变量。绑定变量是在编译时绑定到特定值的变量。在PL/SQL中,可以使用冒号(:)来表示绑定变量。绑定变量的值可以通过语句或查询的参数来传递。绑定变量
2023-09-27

编程热搜

目录