`

Oracle数据库之PLSQL本地动态SQL

阅读更多
--=========本地动态sql:(采用execute immediate)
--根据业务的需要,如果输入不同查询条件,
--则生成不同的执行SQL查询语句,对于这种情况需要使用动态SQL来完成
--Notice : PLSQL只能执行:DML(insert ,update , delete ) ,TCL(commit)语句
---------执行DDL语句,采用execute immediate

--首先看下如下PLSQL程序
declare
	sql_stat VARCHAR2(100);
	v_commit varchar2(20);
begin
	-- 静态SQL :第一次运行时进行编译,而后续再次调用,则不再编译该过程。
	-- 即一次编译,多次调用,使用的相同的执行计划
	insert into emp values ( 8080,'out','developer',7900,sysdate,8999.9,2222,10);
	
	-- 动态SQL: 每次运行时需要事先对其编译。即多次调用则需要多次编译.(结尾不能要 ; 号);
	sql_stat :='DELETE FROM emp WHERE empno=8080';   --使用动态SQL来删除记录
	
	v_commit := 'commit';
	EXECUTE IMMEDIATE sql_stat; --每次执行 每次编译
	EXECUTE IMMEDIATE v_commit;
 END;

-----执行过程:
----1.pl/sql程序分为编译和执行阶段
----2.sql语句分为解析(编译) 和执行
----3.静态sql语句编译(分析) 发生在pl/sql程序的编译阶段.
----4.动态SQL( 用'' 的语句) 是在plsql执行的时候 才会进行分析和执行


--分析下面的SQL
declare
	begin
		execute immediate 'create table t1 (c1 number(2) )';
		insert into t1 values 1;
		commit;
	end;
	
--	ERROR:表或者视图不存在
-- why ?
--在PLSQL编译阶段 ''中的内容当成字符串,不会解析成SQL
-- insert 是静态SQL,在PLSQL编译阶段,会完成语句的分析(语句语法,提及对象,确认对象权限)
-- 但是在提及对象的时候发现 t1 不存在,所以会出错.
------修改如下----
declare
	begin
		execute immediate 'create table t1 (c1 number(2) )';
		execute immediate 'insert into t1 values (1)';
		execute immediate 'commit';
	end;
-- ok:分析
--在PLSQL编译阶段 create , insert , commit 都是字符段,不会解析SQL
--在PLSQL执行阶段,完成 create , insert ,commit的解析和执行操作

--====================DML语句+参数操作(using子句)====================
-- 对于使用了参数传入的动态SQL,需要使用USING子句来指明传入的参数
-- 在DML语句中使占位符, 
--占位符: 用以冒号开头,紧跟任意字母或数字表示
-- 因此在使用EXECUTE IMMEDIATE使用USING子句为其指定其参数。
-- DDL语句不能使用 占位符
declare 
	v_c1 number(2) := 1;
	v_c2 varchar2(10) :='aa';
begin
	--error: PLSQL不支持 静态DDL语句 sql不能执行
	--create table t1 (c1 number(1), c2 varchar2(10) ;--error
	
	-- 动态SQL 创建表
	execute immediate 'create table t1 (c1 number(1), c2 varchar2(10))';
	-- 动态SQL插入+ using参数
	-- DML语句中使用了占位符( :c1, :c2 ) 
	execute immediate 'insert into t1 values'||
				' ( :c1 , :c2)' using v_c1 , v_c2;--为占位符指定参数或值
	execute immediate 'commit';
end;

--======Returning 子句 +DML语句==============
--更新7900的sal,返回更新后的sal

DECLARE
    salary number(6, 2);
    sql_stat varchar2(100);
	v_deptno number(4) :=7900;
BEGIN
    sql_stat := 'UPDATE emp SET sal = 999.99' || 
		' WHERE empno = :eno RETURNING sal INTO :salary'; --使用了占位符:eno,:salary,以及RETURNING子句
    EXECUTE IMMEDIATE sql_stat USING v_deptno  RETURNING INTO salary;  --必须使用USING及RETURNING子句
    COMMIT;
    dbms_output.put_line('salary: ' || salary);
END;


更详细的参见:那些大神博客篇 第一个链接

 

分享到:
评论

相关推荐

    Oracle数据库plsql客户端

    Oracle数据库PL/SQL Developer客户端是数据库管理员和开发人员常用的工具,它专为Oracle数据库系统设计,提供了便捷的界面来编写、测试和调试PL/SQL代码。这个工具的强大之处在于其全面的功能集,允许用户进行数据库...

    oracle客户端(plsql developer连接远程数据库)

    plsql developer连接远程数据库(本地不用安oracle)

    oracle数据库利用plsql提取(导出).doc

    ### Oracle数据库利用PL/SQL开发工具进行数据提取详解 #### 一、Oracle数据库与PL/SQL简介 在深入了解如何利用PL/SQL Developer进行数据提取之前,我们先来简单了解一下Oracle数据库以及PL/SQL的基本概念。 - **...

    Oralce数据库SQL和pl_sql实例教程

    Oracle数据库是世界上最流行的数据库管理系统之一,SQL(Structured Query Language)是用于管理关系数据库的标准语言,而PL/SQL是Oracle数据库特有的编程语言,扩展了SQL的功能,使得能够编写复杂的存储过程和...

    oracle数据库和plsql语法练习

    通过这些学习材料,初学者不仅可以了解Oracle数据库的基本概念,还能熟练掌握SQL查询语言和PL/SQL编程,从而在实际工作中有效地管理和操作Oracle数据库。对于希望提升数据库技能或准备Oracle相关认证的人来说,这些...

    基于oracle数据库的PLSQL编程以及存储过程的创建和使用资料.zip

    在Oracle数据库中,PL/SQL(Procedural Language/Structured Query Language)是一种结合了SQL语句和过程式编程语言的特性,用于编写数据库应用程序的语言。本资料主要关注PLSQL编程以及在Oracle中创建和使用存储...

    PlSQL安装包:用于连接Oracle的工具

    PlSQL Developer是一款强大的集成开发环境,专门用于编写和管理Oracle数据库的PL/SQL代码。它为Oracle数据库管理员、开发人员和分析师提供了全面的功能,简化了与Oracle数据库的交互过程。这款软件是Allround ...

    数据库开发 Oracle数据库 SQL开发教程 全套PPT课件 共20个章节.rar

    数据库开发 Oracle数据库 SQL开发教程 第01章 Oracle数据库基础(共60页).pdf 数据库开发 Oracle数据库 SQL开发教程 第02章 编写简单的查询语句(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第03章 限制...

    使用plsqldev对oracle数据库做备份还原操作

    在Oracle数据库管理中,PL/SQL Developer是一款非常实用的工具,它专为Oracle数据库的存储程序单元开发设计,包括过程、函数、包、触发器等的编写和调试。这款工具以其用户友好、代码质量优化以及高生产力而受到青睐...

    plsql 连接oracle数据库工具

    其中,"plsql"通常指的是Oracle的PL/SQL Developer,这是一个强大的第三方工具,专为开发和管理Oracle数据库的PL/SQL代码而设计。它提供了代码编辑、调试、数据库对象浏览、版本控制等多种功能,极大提高了开发效率...

    oracle 数据库 plsql 存储过程

    ### Oracle数据库PL/SQL存储过程详解 #### 一、存储过程概述 **Oracle存储过程**是一种可以在Oracle数据库中存储并可被多次调用的PL/SQL代码块。它由一系列的PL/SQL语句组成,可以包含控制流程、变量声明等,能够...

    Oracle数据库开发SQL与PLSQL源码

    Oracle数据库开发SQL与PLSQL源码

    用plsql将mdb文件导入到oracle数据库中

    本文旨在详细介绍如何使用PL/SQL将MDB文件(Microsoft Access数据库)导入到Oracle数据库中的过程及相关技术点。 ### 一、概述 标题与描述都明确指出了本篇文章的核心内容:利用PL/SQL进行MDB文件向Oracle数据库的...

    Oracle 数据库SQL和PLSQL实例教程

    Oracle数据库是全球领先的企业级数据库管理系统之一,支持SQL(结构化查询语言)和PLSQL(过程化SQL)。文档中强调了SQL*Plus这一Oracle自带的命令行界面工具,以及SQL和PLSQL的使用实例,这对于数据库管理和应用...

    大型数据库系统技术课程 Oracle数据库OceanBase数据库知识教程 PLSQL介绍全部课程PPT课件共12个章节.rar

    2-2-Oracle数据库知识 PLSQL介绍 共69页.ppt 3-1-Oracle数据库知识 PLSQL控制结构 共25页.ppt 4-1-异常处理 共87页.ppt 4-2-过程与函数 共62页.ppt 4-3-在PLSql中使用sql 共98页.ppt 5-1-DistributedDatabaseSystem...

    oracle数据库连接工具

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,用于存储、管理和检索复杂的数据。为了与Oracle数据库进行交互,我们需要可靠的连接工具。"Oracle数据库连接工具"指的是可以方便地连接到Oracle数据库并执行...

    PLSQL Developer 12.0.7连接Oracle12c数据库 首选项配置文件

    PLSQL Developer是一款强大的Oracle数据库开发工具,而Oracle 12c是Oracle公司推出的数据库服务器版本。在使用PLSQL Developer 12.0.7连接Oracle 12c数据库时,首选项配置文件扮演了关键角色,它允许用户自定义连接...

    不安装oracle使用plsql

    标题中的“不安装oracle使用plsql”意味着要在没有Oracle数据库客户端的情况下使用PL/SQL Developer这一工具。这通常通过Oracle的Instant Client实现,该组件提供了一种轻量级的解决方案,允许用户连接到Oracle...

    数据库oracle中PLSQL语句简介及使用方法的举例说明

    Oracle数据库中的PL/SQL(Procedural Language/Structured Query Language)是一种强大的编程语言,它将SQL的查询功能与过程式编程语言的控制结构相结合,为数据库管理提供了更高级别的抽象和控制。PL/SQL是Oracle...

    无需安装oracle客户端可以直接使用plsql连接oracle数据库

    标题中的“无需安装oracle客户端可以直接使用plsql连接oracle数据库”是指使用PL/SQL Developer这款工具进行Oracle数据库管理,而不需要在本地系统上完整安装Oracle客户端软件。PL/SQL Developer是Allround ...

Global site tag (gtag.js) - Google Analytics