在PL/SQL中使用SQL,动态SQL语句

简介:
在PL/SQL中使用 SQL 
  1. SQL语句的分类 
  SQL语句可以五类: 
  数据操纵语言(DML):用来改变表中已有的数据或者查询数据库表中的数据,但是不会改变表,或者其他对象的结构。 
  数据定义语言(DDL):用来创建、删除或者改变某数据模式对象的结构。更改数据模式对象的权限命令也是DDL。 
  事务控制语句:将SQL语句组织成逻辑事务,事务中的语句作为一个整体执行,或者全部成功或者全部失败。这保证了数据的一致性。 
  会话控制语句:会改变单个数据库会话的设置——例如,启用SQL跟踪或启动一个事件。 
  系统控制语句:会改变整个数据库的设置——例如,启用或禁用存档。 
  类别 
  SQL语句范例 
   
  数据操纵语言(DML) 
  SELECT、INSERT、UPDATE、DELETE、EXPLAIN PLAN 
   
  数据定义语言(DDL) 
  DROP、CREATE、ALTER、GRANT、REVOKE 
   
  事务控制 
  COMMIT、ROLLBACK、SAVEPOINT、SET TRANSACTION 
   
  会话控制 
  ALTER SESSION、SET ROLE 
   
  系统控制 
  ALTER SYSTEM 
   
  2. 在PL/SQL中使用 SQL 
   在PL/SQL中可以直接使用的SQL语句只有DML和事务控制语句,(EXPLAIN PLAIN 尽管属于DML,但使用他也是非法的)要使用DDL语句的话,必须使用动态SQL。 
  为什么会这样?我们先看一下PL/SQL的设计方法。 
  2.1 PL/SQL的设计方法——早邦定 
   大家知道,程序设计语言按照两种方式邦定变量——早期邦定和后期邦定。邦定变量是识别程序中标示符存储位置的过程。在PL/SQL中还包括检查数据库得到访问引用对象的权限。(即在编译期间确定对象的权限,并与其标示符相邦定) 
   PL/SQL在设计时特别采用了早期邦定。这样,一个语句块的执行将尽变快,因为所有的数据库对象在运行前都已经被编译器所确定。这样设计的结果是,DDL语句被禁止使用了。因为DDL语句会修改数据库对象,而数据库对象的权限是在编译期间决定的。 
   下面举例子说明: 
   BEGIN 
   CREATE TABLE temp_table( 
   num_value NUMBER, 
   char_value CHAR(10); 
   INSERT INTO temp_table(num_value,char_value) values (10,’HELLO’); 
   END; 
   在编译这个语句块时,temp_table标示符必须是邦定过的。于是这个过程将检查该表是否存在,但是该表在被运行之前是不会存在的。所以编译通不过,因为该语句块不能被编译,所以他也不可能运行。 
  2.2 使用动态SQL语句 
   这样,要在PL/SQL中使用DDL语句,就必须使用动态SQL语句。什么是动态SQL语句? 
   动态SQL语句允许你在运行时动态生成SQL语句,然后对其进行分析并执行。因为语句在运行之前并位创建出来,所以PL/SQL编译器不必邦定语句中的标示符,这样整个语句就可以通过编译。 
   例如上面的例子: 
   BEGIN 
   EXECUTE IMMEDIATE ‘CREATE TABLE temp_table( 
   num_value NUMBER, 
   char_value CHAR(10)’; 
   EXECUTE IMMEDIATE ‘INSERT INTO temp_table(num_value,char_value) values (10,’HELLO’)’; 

   END;



本文转自sucre03 51CTO博客,原文链接:http://blog.51cto.com/sucre/354934,如需转载请自行联系原作者

相关文章
|
11月前
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
3354 11
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
171 2
|
SQL 关系型数据库 MySQL
详解 pypika 模块:SQL 语句生成器,让你再也不用为拼接 SQL 语句而发愁
详解 pypika 模块:SQL 语句生成器,让你再也不用为拼接 SQL 语句而发愁
829 4
|
SQL Oracle 关系型数据库
SQL与PL/SQL:数据库编程语言的比较
【8月更文挑战第31天】
459 1
|
SQL 运维 监控
SQL Server 运维常用sql语句(二)
SQL Server 运维常用sql语句(二)
150 3
|
SQL XML 运维
SQL Server 运维常用sql语句(三)
SQL Server 运维常用sql语句(三)
188 1
|
SQL 关系型数据库 MySQL
(十七)SQL优化篇:如何成为一位写优质SQL语句的绝顶高手!
(Structured Query Language)标准结构化查询语言简称SQL,编写SQL语句是每位后端开发日常职责中,接触最多的一项工作,SQL是关系型数据库诞生的产物,无论是什么数据库,MySQL、Oracle、SQL Server、DB2、PgSQL....,只要还处于关系型数据库这个范畴,都会遵循统一的SQL标准,这句话简单来说也就是:无论什么关系型数据库,本质上SQL的语法都是相同的,因为它们都实现了相同的SQL标准,不同数据库之间仅支持的特性不同而已。
651 8
|
SQL Java 数据库连接
mybatis动态SQL常用语法总结
MyBatis 使用 OGNL 表达式语言处理动态SQL,如 `if` 标签进行条件判断,`choose`、`when`、`otherwise` 实现多条件选择,`where`、`set` 管理SQL关键字,`trim` 提供通用修剪功能,`foreach` 遍历集合数据。`sql` 和 `include` 用于代码重用,`selectKey` 处理插入后的返回值。参数传递支持匿名、具名、列表、Map、Java Bean和JSON方式。注意SQL转义及使用合适的jdbcType映射Java类型。
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在使用ODPSSQL节点进行SQL任务开发时,如何执行大量的SQL语句
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
244 4