首页 > 数据库 >[20240607]PL/SQL中sql语句的注解.txt

[20240607]PL/SQL中sql语句的注解.txt

时间:2024-06-11 21:00:33浏览次数:10  
标签:COUNT -- text SQL 20240607 session sql

[20240607]PL/SQL中sql语句的注解.txt

--//别人测试遇到的问题,重复测试说明问题.

1.环境:
SCOTT@test01p> @ ver
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production              0

$ cat m2.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..&&1
    LOOP
        SELECT /*+ find_me */ COUNT(*) INTO L_COUNT FROM DEPT WHERE DEPTNO=10;
    END LOOP;
END;
/

2.测试1:
--//session 1:
SCOTT@test01p> set timing on
SCOTT@test01p> @ m2.sql 10000
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.47

--//session 2:
SYS@test> select sql_id ,sql_text,executions from v$sql where sql_text like '%find_me%' and executions>=1e4;
SQL_ID        SQL_TEXT                                                     EXECUTIONS
------------- ------------------------------------------------------------ ----------
b744uv7rtsf8t SELECT /*+ find_me */ COUNT(*) FROM DEPT WHERE DEPTNO=10          10000

3.继续:
$ cat m3.sql
DECLARE
    l_count PLS_INTEGER;
BEGIN
    FOR i IN 1..&&1
    LOOP
        SELECT /* find_me */ COUNT(*) INTO L_COUNT FROM DEPT WHERE DEPTNO=10;
    END LOOP;
END;
/
--//仅仅注解部分没有+加号.
--//退出会话刷新共享池:
SYS@test> alter system flush shared_pool;
System altered.

--//session 1:
SCOTT@test01p> @ m3.sql 30000
PL/SQL procedure successfully completed.
Elapsed: 00:00:01.51

--//session 2:
SYS@test> select sql_id ,sql_text,executions from v$sql where sql_text like '%find_me%' and executions>=1e4;
no rows selected.
--//没有发现包含find_me字符串的sql语句.

--//而实际上匿名PL SQL做了特殊处理,删除注解部分,真正执行的是:
--// SELECT COUNT(*) FROM DEPT WHERE DEPTNO=10
SYS@test> select sql_id ,sql_text,executions from v$sql where  sql_id='9y1zzt1h1f3pz';
SQL_ID        SQL_TEXT                                                     EXECUTIONS
------------- ------------------------------------------------------------ ----------
9y1zzt1h1f3pz SELECT COUNT(*) FROM DEPT WHERE DEPTNO=10                         30000

--//简单验证:
--//session 1:
SCOTT@test01p> @ m3.sql 9999
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.39

--//session 2:
SYS@test> select sql_id ,sql_text,executions from v$sql where  sql_id='9y1zzt1h1f3pz';
SQL_ID        SQL_TEXT                                                     EXECUTIONS
------------- ------------------------------------------------------------ ----------
9y1zzt1h1f3pz SELECT COUNT(*) FROM DEPT WHERE DEPTNO=10                         39999

--//如果注解部分没有+,PL/SQL对于里面的sql语句会作出特殊处理,取消注解,另外注意PL/SQL会格式化sql语句,这些在我以前blog提到.

标签:COUNT,--,text,SQL,20240607,session,sql
From: https://www.cnblogs.com/lfree/p/18242717

相关文章

  • MySQL 触发器(实验报告)
    一、实验名称:触发器 二、实验日期:2024年 6月8日三、实验目的:掌握MySQL触发器的创建及调用;四、实验用的仪器和材料:硬件:PC电脑一台;配置:内存,2G及以上 硬盘250G及以上软件环境:操作系统windows7以上数据库环境:MySQL5.7或MySQL8.0.20五、实验步骤和方法练习:#......
  • SQL 数据库学习 Part 1
    数据和信息信息信息是客观存在的,是关于现实世界事物的存在方式或运动状态数据数据是用来记录信息的可识别的符号,是信息的具体表现形式数据和信息的联系数据是信息的符号表示或载体信息则是数据的内涵,是对数据的语义解释数据库定义数据库是长期存储在计算机内、有组织......
  • mybatis条件判断及动态sql的简单拓展
    在MyBatis中,可以通过使用一些特定的标签(、...)以及其他动态SQL功能来实现条件判断。这使得SQL查询可以根据不同的条件动态生成,从而提高查询的灵活性和可维护性。本文以订单列表简单查询为例,对mybatis条件判断及动态sql进行简单拓展。建表语句CREATETABLE`wwtms`.`order_t......
  • 深入解析MySQL Threads_running:监控、诊断与性能优化策略
    基本概念​在MySQL中,Threads_running是一个用于监控数据库并发连接数的指标。它表示当前正在执行的线程数。当该值超过数据库能够处理的最大连接数时,可能会导致数据库性能下降甚至崩溃。线程数过多会由于上下文切换、锁等待等问题从而导致性能急剧下降。设置Threads_......
  • 优化MySQL连接管理:深入解析max_connections参数与解决Too Many Connections策略
    前言​在现代的数据库管理中,合理配置max_connections参数对于确保MySQL数据库的稳定性和高效性至关重要。本文将深入探讨max_connections的基本概念,分析导致“Toomanyconnections”错误的常见原因,并提供一系列解决方案,以帮助数据库管理员和开发者优化数据库性能。基本......
  • SQLynx荣登Web SQL工具ChatGPT推荐榜首,数据库管理工具首选
    近年来,随着互联网技术的迅猛发展,数据库管理工具也在不断进步和创新。作为一种便捷且高效的数据库管理方式,WebSQLIDE工具逐渐成为开发者和数据库管理员的首选。在众多WebSQL工具中,SQLynx凭借其卓越的功能和用户体验,荣登ChatGPT同类推荐榜首,成为市场上的领导者。目录1SQ......
  • 五天搞定Mysql基础知识-Day04
    学习目标:        1、掌握内连接        2、掌握左连接和右连接        3、掌握自关联和子查询·第一章数据准备一、创建表,并向表插入数据第二章连接查询一、基本概念        1、当查询结果来源于多张表时,需要将多张表连接成一个大......
  • Sql Server 分批复制数据
    添加辅助列ALTERTABLEdbo.SourceTableADDIsCopiedBITNOTNULLDEFAULT0;这里要给源表添加一个标识列,是因为我不想用到ORDERBY。当然也可以改成不用辅助列,用ORDERBY的方式。创建目标表SELECT*INTODestinationTableFROMdbo.SourceTableWHERE1=0;当条件不满......
  • Mssql数据注入
    1.查询用户创建的数据表selectid,name fromsysobjectswherextype='u'; 2.查询用户创建数据表的具体列名select*fromsyscolumnswhere id=上一步获取的id值;3.查询具体内容selectid,字段名from数据表名;4.数据库名db_name()5.用户登录名suser_name()6......
  • 以sqlilabs靶场为例,讲解SQL注入攻击原理【54-65关】
    【Less-54】与前面的题目不同是,这里只能提交10次,一旦提交超过十次,数据会重新刷新,所有的步骤需要重来一次。解题步骤:根据测试,使用的是单引号闭合。#判断字段的数量?id=1'orderby3--aaa#获取数据库的名字?id=-1'unionselect1,2,database()--aa#获取数据......