mysql execute immediate_使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL
一个SQL,通过SPM固定它的执行计划,可以通过DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE实现。也可以通地此功能在不修改原SQL的情况下对其加HINT来固定执行计划。
DB VERSION:Oracle 11.2.0.4
OS:CentOS 6.6
例如:
原SQL走索引:
SELECT * FROM SCOTT.TB_SPM WHERE OBJECT_ID=10;
想通过加HINT让其走全表扫描:
SELECT /*+FULL(TB_SPM)*/* FROM SCOTT.TB_SPM WHERE OBJECT_ID=10;
在V$SQL中查询出,原SQL的SQL_ID=064qcdmgt6thw,加HINT的SQL的SQL_ID=ahdtbgvsd3bht,PLAN_HASH_VALUE=970476072。
执行以下:
DECLARE
CNT NUMBER;
V_SQL CLOB;
BEGIN
--得到原语句SQL文本
SELECT SQL_FULLTEXT INTO V_SQL FROM V$SQL WHERE SQL_ID = '064qcdmgt6thw' AND ROWNUM=1;
--用加HINT的SQL的SQL_ID和PLAN_HASH_VALUE,来固定原语句的SQL
CNT := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(SQL_ID => 'ahdtbgvsd3bht', PLAN_HASH_VALUE => 970476072, SQL_TEXT => V_SQL);
END;
这样就将加HINT的执行计划固定在原语句上。执行原语句,在V$SQL的PLAN_HASH_VALUE列和SQL_PLAN_BASELINE列来确认是否固定。
测试中发现,一些含有绑定变量的SQL,用常量的SQL的SQL_ID和PLAN_HASH_VALUE无法固定,此时可以尝试使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL。
例如:
DECLARE
V_SQL VARCHAR2(2881064151);
BEGIN
V_SQL := 'SELECT /*+FULL(TB_SPM)*/* FROM SCOTT.TB_SPM WHERE OBJECT_ID=:1';
EXECUTE IMMEDIATE V_SQL
USING 10;
END;
或
var v number;
exec :v :=10
SELECT /*+FULL(TB_SPM)*/* FROM SCOTT.TB_SPM WHERE OBJECT_ID=:V;
Oracle 通过SQL PROFILE为SQL语句加HINT可参考:http://www.linuxidc.com/Linux/2015-05/116974.htm
更多Oracle相关信息见Oracle 专题页面 http://www.codesec.net/topicnews.aspx?tid=12
mysql execute immediate_使用EXECUTE IMMEDIATE来生成含有绑定变量的SQL相关推荐
- mysql绑定变量的值_关于绑定变量的SQL绑定什么值
当然这不是判断在哪里建立索引的依据. SELECT * FROM (SELECT A.*, SC.NAME, SC.POSITION AS "绑定变量在SQL语句中的位置", CA ...
- mysql 查询绑定变量_MySQL高级特性——绑定变量
从MySQL 4.1 版本开始,就支持服务器端的绑定变量,这大大提高了客户端和服务器端数据传输的效率 介绍 当创建一个绑定变量 SQL 时,客户端会向服务器发送一个SQL语句的原型.服务器端收到这个S ...
- mysql中Prepare、execute、deallocate的使用方法
mysql中Prepare.execute.deallocate的使用方法 PREPARE语句准备好一条SQL语句,并分配给这条SQL语句一个名字供之后调用.准备好的SQL语句通过EXECUTE命令执 ...
- python亿级mysql数据库导出_Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法...
本文实例讲述了python实现将MySQL数据库表中的数据导出生成csv格式文件的方法.分享给大家供大家参考,具体如下: #!/usr/bin/env python # -*- coding:utf- ...
- mysql题库随机抽取试题_Python从MySQL数据库中面抽取试题,生成试卷
一.背景 本文章主要是分享如何使用Python从MySQL数据库中面抽取试题,生成的试卷每一份都不一样. 二.准备工作 1.安装Python3 2.安装库 pip install python-doc ...
- mysql 全局不重复_如何批量生成MySQL不重复手机号大表实例代码
前言 在MySQL很多测试场景,需要人工生成一些测试数据来测试.本文提供一个构造MySQL大表存储过程,可以生成包含用户名,手机号码,出生日期等字段.也可以通过滤重来使得手机号码不重复,模拟现实场景. ...
- oracle execute immediate 游标,EXECUTE IMMEDIATE 常见使用方法
在ORACLE的PL/SQL里: EXECUTE IMMEDIATE 代替了以前Oracle8i中DBMS_SQL package包. 它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块. ...
- mysql手机号码不重复_如何批量生成MySQL不重复手机号大表实例代码
前言 在MySQL很多测试场景,需要人工生成一些测试数据来测试.本文提供一个构造MySQL大表存储过程,可以生成包含用户名,手机号码,出生日期等字段.也可以通过滤重来使得手机号码不重复,模拟现实场景. ...
- mysql jdbc 绑定变量_jdbc测试mysql数据库sql预解析(绑定变量)
jdbc测试mysql数据库sql预解析(绑定变量) 用习惯了oracle,学习mysql,想测试一下mysql绑定变量的效果.以前看网上介绍大部份都说mysql没有sql共享池的概念,所以也不存在s ...
最新文章
- centos8安装KVM/QEUM虚拟化
- 万变不离其中----SQL必记语法
- 利用sshpass实现ansible功能
- 一些技术社区关于博客内图片 markdown 源代码的字数统计
- 牛客题霸 [ 	缺失数字] C++题解/答案
- java 数据库查询Date类型字段 没有了时分秒 全为 00 的解决办法
- 无限分级 层次输出 demo
- day4作业(基本运算流程if for)
- Python 分析Nginx 日志并存入MySQL数据库(单线程)
- mysql bigint 转int_技术分享 | MySQL ?删库不跑路(建议收藏)
- C++代码示例2 ~ 求立方体的面积和体积并求出两个立方体是否相等
- 图易服装PDM产品数据管理系统
- 【Docker】Docker下载与安装
- GeoServer发布Shapefile矢量数据
- 硬盘SMART监控工具Scrutiny
- 百度世界2020技术“大阅兵”背后的营销战役
- 将源码打包成deb软件包
- 苹果计算机如何显示错误,科普电脑打开苹果手机视频教程及Apple ID验证失败发生未知错误怎么解决...
- Mave概念及其配置
- 用vue2写一个新闻列表页,和新闻详情页,该怎么做?
热门文章
- 疫情影响企业发展能力?也许它能帮您摆脱困境
- cdf文件 mysql,在linux下用fortran读取netcdf文件(以WRF模式输出的数据为例)
- 2020年人生目标 随笔记录
- 2020年的总结和2021的目标
- 嵌入式开发模拟器:qemu使用,仿真多种方式启动内核kernel (超详细,tftp/nfs等方式)
- 解释java是值传递
- 各大网站视频自动播放代码(优酷、搜狐、酷6、土豆等)
- 聚合不应出现在 WHERE 子句中,除非该聚合位于 HAVING 子句或选择列表所包含
- Walker智慧农业物联网云平台(Version:3.0.1)「源码」
- 美团点评2019年秋招部分编程题汇总 解题报告 Apare_xzc