热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Oracle动态SQL语法

动态SQL语法只有在运行时候Oracle才能够检测它的格式是否正确INTO和USING子句是可选的如果SQL语句是一个查询语句的话,我们可以使用INTO子句INTO语句用于接收SELECT语句选择的记录值,可以是一个变量序列,也可以...SyntaxHighlighter.all

\

动态SQL语法
 
\
 
只有在运行时候Oracle才能够检测它的格式是否正确
INTO和USING子句是可选的
如果SQL语句是一个查询语句的话,我们可以使用INTO子句
INTO语句用于接收SELECT语句选择的记录值,可以是一个变量序列,也可以是一个记录型的变量也就是record型的变量
 
这个变量序列的顺序对应于查询结果集中的记录的值的顺序
如果有参数需要动态确定,我们可以使用USING子句
动态创建表
 
\

示例
[sql] 
  1. --动态SQL语句  
  2. begin   
  3.   execute immediate 'create table bonus (id number,ant number)';  
  4. end;  
  5.     
  6. --动态查询用户的电话  
  7.  declare  
  8.  sql_stmt varchar2(200); --存储查询语句  
  9.  emp_id number(10):='&emp_id';  
  10.  emp_rec employees%rowtype;  
  11.    
  12.  begin  
  13.     sql_stmt:='select * from employees where id=:id'  ;  
  14.     execute immediate sql_stmt into emp_rec using emp_id;  
  15.     dbms_output.put_line(emp_rec.phone);  
  16.    
  17.  end;  
[sql] 
  1. --动态插入  
  2.  declare   
  3.      sql_stmt varchar(200);  
  4.      emp_id number(10):='&emp_id';  
  5.      emp_rec employees%rowtype;  
  6.  begin  
  7.    sql_stmt:='insert into employees (id) values(:id)';  
  8.    execute immediate sql_stmt using emp_id;  
  9.       
  10.  end;  
execute immediate语句只能执行返回一行或者没有返回,如果要编写返回多行的sql语句要使用REF动态游标
 
\
 
示例:
[sql] 
  1. --动态SQL,动态游标  
  2.  declare  
  3.     e_id number(10);  
  4.     e_name varchar2(50);  
  5.     s_salary number(8);  
  6.     type c_type is ref cursor;  
  7.     cur c_type;  
  8.     p_salaty number:='&p_id';  
  9.  begin  
  10.    open cur for   
  11.    'select e.id,e.name,s.salaryvalue from employees e,salary s  
  12.    where e.id=s.employeeid and s.salaryvalue>:sal order by id asc'  
  13.    using p_salry;  
  14.    dbms_output.put_line('薪水大于'||p_salary||'的员工有:');  
  15.    loop   
  16.      fetch cur into e_id, e_name,s_salary;  
  17.      exit when cur%notfound;  
  18.      dbms_output.put_line('编号:'||e_id||'姓名:'||e.name||'薪水'||s_salary);  
  19.      end loop;  
  20.      close cur;  
  21.  end;  
  22.  

推荐阅读
  • MySQL 5.7 服务端在 Windows 上的安装与配置
    本文详细介绍了在 Windows 系统上安装和配置 MySQL 5.7 服务端的方法,包括 my.ini 配置文件的设置、初始化数据库、启动服务以及设置用户权限等步骤。 ... [详细]
  • 本文介绍了如何在 SQL Server (MSSQL) 数据库中更新 XML 列中的属性和节点内容。 ... [详细]
  • 如何将两个具有相同主键的Excel表格合并
    本文介绍如何将两个具有相同主键的Excel表格进行合并,通过左连接的方式将表2的数据插入到表1中。具体步骤包括在表1中添加新的列、使用VLOOKUP函数进行数据匹配,以及通过SQL语句实现数据库中的表连接。 ... [详细]
  • 解决Win7安装SQL Server时NetFx3启动失败的问题
    在使用Win7系统安装SQL Server时,部分用户可能会遇到“启动Windows功能NetFx3时出错”的提示。本文将详细介绍这一问题的原因及解决方法。 ... [详细]
  • WPF项目学习.一
    WPF项目搭建版权声明:本文为博主初学经验,未经博主允许不得转载。一、前言记录在学习与制作WPF过程中遇到的解决方案。使用MVVM的优点是数据和视图分离,双向绑定,低耦合,可重用行 ... [详细]
  • 本文讨论了在 Oracle 10gR2 和 Solaris 10 64-bit 环境下,从 XMLType 列中提取数据并插入到 VARCHAR2 列时遇到的性能问题,并提供了优化建议。 ... [详细]
  • 本文探讨了在 SQL Server 2012 的 Integration Services 项目中配置 ADO.NET 源时遇到的错误及其解决方案。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 数据仓库ETL开发过程中,如何有效进行测试是一个关键问题。由于数据仓库通常包含大量数据,并且出于安全考虑,开发库和测试库的数据与生产库不完全一致,这给测试带来了挑战。本文将探讨适用于ETL开发的测试方法,包括单元测试、集成测试以及具体测试技术。 ... [详细]
  • 周排行与月排行榜开发总结
    本文详细介绍了如何在PHP中实现周排行和月排行榜的开发,包括数据库设计、数据记录和查询方法。涉及的知识点包括MySQL的GROUP BY、WEEK和MONTH函数。 ... [详细]
  • 如何在不同数据库中提取前N%的记录
    本文详细介绍了如何在SQL Server、Oracle和MySQL等不同数据库中提取前N%的记录。通过具体的示例和代码,帮助读者理解和掌握这些方法。 ... [详细]
  • Nacos 0.3 数据持久化详解与实践
    本文详细介绍了如何将 Nacos 0.3 的数据持久化到 MySQL 数据库,并提供了具体的步骤和注意事项。 ... [详细]
  • 本文介绍 DB2 中的基本概念,重点解释事务单元(UOW)和事务的概念。事务单元是指作为单个原子操作执行的一个或多个 SQL 查询。 ... [详细]
  • MySQL Server 8.0.28 升级至 8.0.30 的详细步骤
    为了修复安全漏洞,本文档提供了从 MySQL Server 8.0.28 升级到 8.0.30 的详细步骤,包括备份数据库、停止和删除旧服务、安装新版本以及配置相关环境变量。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
author-avatar
我是来工作的程_586
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有