首页 > 数据库 >oracle SQL引擎和PL/SQL引擎

oracle SQL引擎和PL/SQL引擎

时间:2023-04-26 19:36:13浏览次数:48  
标签:depts 引擎 SQL oracle deptno PL numlist


如下图所示,PL/SQL引擎会执行过程化语句,但它把SQL语句发送给SQL引擎处理,然后SQL引擎把处理的结果返回给PL/SQL引擎。


oracle SQL引擎和PL/SQL引擎_批量导入


PL/SQL和SQL引擎间的频繁切换会大大降低效率。典型的情况就是在一个循环中反复执行SQL语句。例如,下面的DELETE语句就会在FOR循环中被多次发送到SQL引擎中去:


初始化一些数据:

create table emp
(
  emp_id int primary key,
  deptno int not null
);



declare
l_deptno int;
begin
  for i in 1..1000000 loop
    l_deptno := i mod 4;
    insert into emp values (i, l_deptno);
  end loop;
  commit;
end;



测试1:

SQL> declare
  2    type numlist is array(20) of number;
  3    depts numlist := numlist(0,1,2,3);
  4  begin
  5    for i in depts.first .. depts.last loop
  6      delete from emp where deptno = depts(i);
  7    end loop;
  8    commit;
  9  end;
 10  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 48.93



测试2:

SQL> declare
  2    type numlist is array(20) of number;
  3    depts numlist := numlist(0,1,2,3);
  4  begin
  5    forall i in depts.first .. depts.last
  6      delete from emp where deptno = depts(i);
  7    commit;
  8  end;
  9  /

PL/SQL 过程已成功完成。

已用时间:  00: 00: 54.21



关键字FORALL能让PL/SQL引擎在将集合发送到SQL引擎之前,批量导入集合元素。虽然FORALL也包含了迭代的模式,但它并不是简单的FOR循环。



《PLSQL用户指南与参考》这本书里是这样写的,可是测试下来,并不是那样的。

标签:depts,引擎,SQL,oracle,deptno,PL,numlist
From: https://blog.51cto.com/u_1002776/6228662

相关文章

  • oracle Io 异常: The Network Adapter could not establish the connection
    用jdbc连oracle的时候,报错:java.sql.SQLException:Io异常:TheNetworkAdaptercouldnotestablishtheconnection查看C:\oracle\product\10.2.0\db_1\NETWORK\ADMIN里的listener.ora和tnsnames.ora,发现端口变成了1527,不知道怎么回事,默认是1521啊。改回来,就可以了。......
  • oracle 游标总结
    for循环游标DECLARECURSORC_EMPISSELECTEMPNO,ENAME,JOB,SALFROMEMPWHEREJOB='MANAGER';V_ROWC_EMP%ROWTYPE;BEGINFORV_ROWINC_EMPLOOPDBMS_OUTPUT.put_line(V_ROW.EMPNO||'-'||V_ROW.ENAME||'-'||V_ROW.JOB......
  • windows下mysql5.7安装,及python操作mysql
    windows下mysql5.7安装mysql5.7官方下载:https://www.mysql.com/可参考教程:https://blog.csdn.net/qq_39715000/article/details/123534326?注意:一:my.ini配置文件:如果保存目录以t开头,默认会将t转义为空格(解决方法加这个\\):[mysqld]#端口号port=3306#mysql-5.7.27-winx6......
  • 对数据库中存储的程序进行现代化改造,以使用 Amazon Aurora PostgreSQL 联合查询、pg_c
    作为数据库迁移和现代化的一部分,您可以继续使用存储的程序和调度作业,将远程实例中的数据整合到集中式数据存储中。 AmazonSchemaConversionTool(AmazonSCT)可帮助您将传统的Oracle和SQLServer函数转换为其等效的开源函数。但是,如何继续使用存储的程序从远程数据库中提取数......
  • fasttrack的SQLPwnage(失败)
    这次也是失败的,操作如下:root@bt:/pentest/exploits/fasttrack#./fast-track.py-iFast-TrackMainMenu:1.Fast-TrackUpdates2.AutopwnAutomation3.NmapScriptingEngine4.MicrosoftSQLTools5.MassClient-SideAttack6.Exploit......
  • (a)ttempt SQL Ping and Auto Quick Brute Force 续2——原因
    今晚再次调试,发现生成的h2b.exe无法运行,这个文件用来把hex转换成bin,而且后面的代码,似乎也有问题:print"Metasploitpayloaddelivered.."print"Convertingourpayloadtobinary,thismaytakeafew..."query5=("""xp_cmdshell'h2bmetasploit%s&......
  • SQL Injector - POST Parameter Attack
    login.jsp如下:<%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.d......
  • SQL Injector - GET Manual Setup Binary Payload Attack
    bt5上操作:***********************************************************************Fast-Track-Anewbeginning...****Version:4.0.2......
  • MSSQL2K - SQL Injector - Query String Parameter Attack结合netcat获得反向cmdshell
    fasttrack操作:root@bt:~#cd/pentest/exploits/fasttrack/root@bt:/pentest/exploits/fasttrack#./fast-track.py-i******************************************************Performingdependencychecks...******************************************************......
  • MSSQL2K - SQL Injector - Query String Parameter Attack获得反向cmdshell
    上次没有成功获得cmdshell,因为fasttrack没有这方面的代码,这次编写了server.py。importsocketHOST=''PORT=4444s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.bind((HOST,PORT))s.listen(1)conn,addr=s.accept()cmd="\n"try:whileTrue:......