Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >是否可以在绑定变量中使用DBMS_SQLHASH.GETHASH?

是否可以在绑定变量中使用DBMS_SQLHASH.GETHASH?
EN

Stack Overflow用户
提问于 2018-06-14 02:42:47
回答 1查看 768关注 0票数 2

在Oracle中,DBMS_SQLHASH.GETHASH是返回查询哈希的好方法,而不是滚动自己的哈希代码。我们使用它已经有一段时间了,一切都很好,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT DBMS_SQLHASH.GETHASH(q'[SELECT * FROM SCOTT.EMP ORDER BY 1]', 1) FROM DUAL;

但是现在我们遇到了一些情况,我们需要将绑定变量传递到已执行的字符串中,而我无法找到这样做的方法。

实际上,我们正在努力做到这一点:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT DBMS_SQLHASH.GETHASH(q'[SELECT * FROM SCOTT.EMP WHERE JOB = 'CLERK' ORDER BY 1]', 1) FROM DUAL;

这显然有效,但不使用绑定变量,而且有点难看。

我的想法是使用动态SQL绑定变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DECLARE
  vResult VARCHAR2(4000);
  vRole VARCHAR2(5) := 'CLERK';
BEGIN
  EXECUTE IMMEDIATE
    'SELECT DBMS_SQLHASH.GETHASH(''SELECT * FROM SCOTT.EMP WHERE JOB = :Role ORDER BY 1'', 1) FROM DUAL'
    INTO vResult
   USING vRole;

  DBMS_OUTPUT.PUT_LINE(vResult);
END;
/

但这将返回ORA-01006:绑定变量不存在,这可能是因为执行立即字符串中的绑定变量也在字符串中。

我已经看到了一些建议,可能会使用DBMS_SQL以我想要的方式执行查询,但是我沿着这些思路进行的实验也得到了同样的结果。

是否有可能以这种方式传递绑定变量,还是我注定要在没有它们的情况下重写查询?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2018-12-28 08:34:51

在这种情况下,文字连接是正确的解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CREATE OR REPLACE PROCEDURE my_hash( p_job IN VARCHAR2 )
IS
   vResult      VARCHAR2( 4000 );
   v_statement  VARCHAR2( 500 )
      := q'[SELECT DBMS_SQLHASH.GETHASH('SELECT * FROM HR.EMPLOYEES WHERE JOB_ID = '']' || p_job || q'['' ORDER BY 1', 1) FROM DUAL]';
BEGIN
   DBMS_OUTPUT.PUT_LINE( v_statement );

   EXECUTE IMMEDIATE v_statement INTO vResult;

   DBMS_OUTPUT.PUT_LINE( vResult );
END;
/

DECLARE
   vRole  VARCHAR2( 12 ) := 'PU_CLERK';
BEGIN
   my_hash( vRole );
END;
/

我为人力资源计划重编了你的例子。注意,即使在q‘[]符号中,双引号也是必需的,因为有两级解析。这也阻止了SQL注入,因为参数将始终被解释为文本值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50855597

复制
相关文章
【DB笔试面试581】在Oracle中,绑定变量是什么?绑定变量有什么优缺点?
通常在高并发的OLTP系统中,可能会出现这样的现象,单个SQL的写法、执行计划、性能都是没问题的,但整个系统的性能就是很差,这表现在当系统并发的数量增加时,整个系统负载很高,CPU占用率接近100%。其实,这种系统性能随着并发量的递增而显著降低的现象,往往是因为这些系统没有使用绑定变量而产生了大量的硬解析所致。因为同一条SQL语句仅仅由于谓词部分变量的不同而在执行的时候就需要重新进行一次硬解析,造成SQL执行计划不能共享,这极大地耗费了系统时间和系统CPU资源。那么怎样才能降低OLTP应用系统的硬解析的数量呢?答案就是使用绑定变量。高并发的OLTP系统若没有使用绑定变量则会导致硬解析很大,这在AWR中的Load Profile部分可以很容易的看出来。
AiDBA宝典
2019/09/29
2.7K0
【DB笔试面试581】在Oracle中,绑定变量是什么?绑定变量有什么优缺点?
oracle绑定变量使用方法总结_绑定变量不存在
大家好,又见面了,我是你们的朋友全栈君。 String sql=“select * from users where username=? and pwd=?”; pstat=con.prepare
全栈程序员站长
2022/10/03
7870
【DB笔试面试389】在Oracle中,什么是绑定变量窥探?
目标SQL若不使用绑定变量,则当具体输入值一旦发生了变化,目标SQL的SQL文本就会随之发生变化,这样Oracle就能很容易地计算出对应Selectivity和Cardinality的值,进而据此来选择执行计划。但对于使用了绑定变量的目标SQL而言,情况就完全不一样了,因为现在无论对应绑定变量的具体输入值是什么,目标SQL的SQL文本都是一模一样的。对于使用了绑定变量的目标SQL而言,Oracle可以选择如下两种方法来决定其执行计划:
AiDBA宝典
2022/02/22
9200
【DB笔试面试583】在Oracle中,什么是绑定变量分级?
绑定变量分级(Bind Graduation)是指Oracle在PL/SQL代码中会根据文本型绑定变量的定义长度而将这些文本型绑定变量分为四个等级,不同等级分配的内存大小不同,如下表所示:
AiDBA宝典
2019/09/29
7210
【DB笔试面试806】在Oracle中,如何查找未使用绑定变量的SQL语句?
利用V$SQL视图的FORCE_MATCHING_SIGNATURE字段可以识别可能从绑定变量或CURSOR_SHARING获益的SQL语句。如果SQL已使用绑定变量或者CURSOR_SHARING,那么FORCE_MATCHING_SIGNATURE在对其进行标识时将给出同样的签名。换句话说,如果两个SQL语句除了字面量的值之外都是相同的,它们将拥有相同的FORCE_MATCHING_SIGNATURE,这意味着如果为它们提供了绑定变量或者CURSOR_SHARING,它们就成了完全相同的语句。所以,使用FORCE_MATCHING_SIGNATURE字段可以识别没有使用绑定变量的SQL语句。
AiDBA宝典
2020/05/25
6.4K0
Java中是否直接可以使用enum进行传输
我们在进行传输的时候 会有一些状态值,如Status为1代表删除,为0代表失败或者怎么样的。只传输一个)0或者1过去给第三方(此处不包括给前端),如果没有契约第三方会不认识你这个是什么意思,那我们在平时写业务逻辑的时候使用枚举很轻易就知道了什么状态什么值。所以我们在构建DTO对象的时候里面放一个枚举来表示。
袁新栋-jeff.yuan
2020/08/26
3.9K0
【DB笔试面试582】在Oracle中,什么是绑定变量窥探(上)?
目标SQL若不使用绑定变量,则当具体输入值一旦发生了变化,目标SQL的SQL文本就会随之发生变化,这样Oracle就能很容易地计算出对应Selectivity和Cardinality的值,进而据此来选择执行计划。但对于使用了绑定变量的目标SQL而言,情况就完全不一样了,因为现在无论对应绑定变量的具体输入值是什么,目标SQL的SQL文本都是一模一样的。对于使用了绑定变量的目标SQL而言,Oracle可以选择如下两种方法来决定其执行计划:
AiDBA宝典
2019/09/29
1.5K0
go 中 struct 是否可以比较?
今天来水一篇,最近比较忙,一直没有时间写 go 相关的,今天从一个小问题入手,来说说 struct 的比较问题。
LinkinStar
2022/09/01
8460
【DB笔试面试582】在Oracle中,什么是绑定变量窥探(下)?
若启用了绑定变量窥探且WHERE条件为“目标列 BETWEEN X AND Y”的selectivity计算公式为:
AiDBA宝典
2019/09/29
1.2K0
三十、是否可以使用 count(*)
一、是否可以使用 count(*) 在 SQL 中,COUNT() 函数返回匹配指定条件的函数。 序号COUNT用法作用描述1COUNT(*)返回总记录数,包含 NULL 值2COUNT(1)与COUNT(*)的作用一样3COUNT(column_name)返回指定列的数目,NULL值不统计4COUNT(DISTINCT column_name)返回指定列不同值的数目,NULL值不统计 Tip: COUNT(*) 与 COUNT(column_name) 的作用不一样,如果列值包含 NULL ,统计结果就
喵叔
2022/05/06
4810
shell中判断变量是否为空
1.变量通过“ ”引号引起来 如下所示,可以得到结果为 is null #!/bin/bash para1= if[! -n "$para1"] then echo "is null" else echo "not null" fi 2.直接通过变量判断: 如下所示,得到的记过为: is null #!/bin/bash para1= if[!${para1}];then echo "is null" else echo "not null" f
休辞醉倒
2019/07/25
9.8K0
在PHP中检测一个类是否可以被foreach遍历
在PHP中,我们可以非常简单的判断一个变量是什么类型,也可以非常方便的确定一个数组的长度从而决定这个数组是否可以遍历。那么类呢?我们要如何知道这个类是否可以通过 foreach 来进行遍历呢?其实,PHP已经为我们提供了一个现成的接口。
硬核项目经理
2020/06/04
2K0
SQL里是否可以使用JOIN
很多公司都禁止程序员在 SQL 中使用 JOIN,至于原因则出奇的一致:用 JOIN 慢。不过我从没见过谁来论证为什么用 JOIN 慢,结果这个人云亦云的结论越传越广,让我觉得是时候来讨论一下这个看似正确的结论了。
LA0WAN9
2021/12/14
5750
SQL里是否可以使用JOIN
虚拟主机怎么绑定域名?绑定失败可以正常使用吗?
众所周知,只拥有一个普通的域名,是不能够正常运营网站的,人们还需要将域名绑定在主机上,这时候许多人使用的都是虚拟主机,它可以方便人们进行操作,不过还是应当提前搞清楚虚拟主机怎么绑定域名这个问题。
用户8739990
2021/08/06
8.6K0
虚拟主机怎么绑定域名?绑定失败可以正常使用吗?
(五)在 React 中绑定事件
# 🥥一、在 React 中绑定事件 接着上一章的案例,给他绑定事件,动态的切换 boolea # 🥮二、预热原生事件绑定 # 原生事件绑定的几种方式 <button id="btn1">按钮一</button> <button id="btn2">按钮二</button> <button onclick="demo()">按钮三</button> <script> // 方法一 兼容性最好 const btn1 = document.getElmentById('btn1') btn1.addEvent
老怪兽
2023/02/22
2.6K0
PostgreSQL PG序列 与 序列是否可以绑定到多个表的疑问
POSTGRESQL 表的自增类似ORACLE 的做法, 当然这不是说就是一样,只是类似. PostgreSQL的序列本身是需要创建的类似于一个数字序列的生成器,表中字段需要通过设置来获取序列给出的值, one by one .
AustinDatabases
2021/08/06
1.8K0
PostgreSQL  PG序列 与 序列是否可以绑定到多个表的疑问
Oracle 绑定变量窥探
    Bind Peeking是Oracle 9i中引入的新特性,一直持续到Oracle 10g R2。它的作用就是在SQL语句硬分析的时候,查看一下当前SQL谓词的值 ,以便生成最佳的执行计划。而在oracle 9i之前的版本中,Oracle 只根据统计信息来做出执行计划。
Leshami
2018/08/14
1.7K0
JavaScript 中如何判断变量是否为数字
JavaScript 是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存储不同类型的数据。如果没有文档和一致性,我们在使用代码时并不总是知道变量的类型。
前端小智@大迁世界
2020/10/29
2.8K0
点击加载更多

相似问题

是否可以通过使用变量来绑定视图?

10

是否可以在select子句中绑定变量?

12

是否可以绑定/检查查询中是否发生了绑定变量?

14

是否可以在Oracle中通过绑定变量引用列名?

30

是否可以在deviceready中调用工厂绑定变量?

120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文