(1).静态的sql语句是的指嵌入在pl/sql语句块中的直接执行语句,而动态的sql语句是指根据业务特定操作而动态输入的
sql语句块,一般静态态句块要优于动态语句块如果知道业务逻辑最好不要用动态sql
(2).动态语句可放在pl/sql语句块中,也可以放在过程,包都语句中动态语句一般分为三种处理方法
一.利用execute immediate ,他可以处理多数的动态sql,包括DDL,DCL,DML,但他吸能处理单行的select语句
--eg
declare
va varchar2(100);
begin
va:='update emp set sal=sal*1.1';--定义了一个动态的sql语句,并让他等于变量va
execute immediate va;--指行该动态sql语句va
end;
在使用execute immediate 时,有时候我们需要通过占位符来占位,然后再通过using语句来动态的给其传参数
需要说明的是占位符只是用来起个占位的作用,这和他的名字没任何关系,只与定位的顺序有关
declare
va varchar2(200);
begin
va:='update emp set sal=sal+:dd';--:dd只是用来占位没别的作用
execute immediate va using &yy;--通过using 语句来传入数值,与他的名定没任何关系
end;
同时在使用execute immediate时,有时动态语句中有returning语句,这时我们就需要定义一个变量,
然后在execute immediate后面利用returning into语句将值传递给这个这变量
--eg
declare
va varchar2(200);--定义一个变量接收sql动态语句
va1 number(20);--定义一个变量接收return的值
begin
va:='update emp set sal=:aa where ename=:bb '||'returning sal into :ss';--:aa,:bb,:ss均为占位符,没任何意义
execute immediate va using &aa,'&bb' returning into va1;
dbms_output.put_line(va1);
end;
execute immediate 在处理查询语句时必须要用into语句 接收返回的数据(execute immediate只能处单行的查询)
--eg
declare
va1 emp%rowtype; --定义一个记录来接收select查询返回的数据
va varchar2(200);--定义一个接收sql动态语句
begin
va:='select * from emp where empno=:empno';
execute immediate va into va1 using &empno;
dbms_output.put_line(va1.ename||' '||va1.sal||' '||va1.mgr);
end;
二.利用游标来处理多行查询 语句:open for fetch close
--eg
declare
type reftype is ref cursor;----定义一个游标变量
my reftype;
emp_result emp%rowtype;
sql_a varchar2(100);
begin
sql_a := 'select * from emp where deptno=:dno';
open my for sql_a using &1;
loop fetch my into emp_result;
exit when my%notfound;
dbms_output.put_line(emp_result.ename || ' ' || emp_result.sal);
end loop;
end;
--同理在动态sql的查询中一样可以使用bluk collect into 语句来进行批处理.
(3).使用对像类型
对像同样分为属性与方法
方法分为:构造方法,map方法,membr方法,static方法
Member方法:用于访问对象实例的数据
Static方法:用于访问对象类型
Map方法:对于标量变量来说,其数据可以直接进行比较,但是对象类型的数据不能直接比较
order方法 map可以比较两个或都 两个以上的,但是order就只
能比较两个
建立一个对像
create or replace type person as object --定义一个对像
( name varchar2(20),
age number(3),
member function change_name(va varchar2)return varchar2,--定义一个 member函数
map member function getname return varchar2--定义一个map函数
);
方法定义之后必须给以实现
--申明了对像方法之后必须在对像体中给出方法的实现
create or replace type body person as--定义一个对像体
member function change_name(va varchar2(20))
is
begin
name:=va;
return name;
end;
member function getname return varchar2
is
vn varchar2(20);
begin
return name;
end;
end;
create table persons( pp person)
select * from persons
declare
begin
insert into persons values(person('张三',25));
insert into persons values(person('李林',8));
end;
select * from emp
create or replace function my_function(va1 varchar2,va2 varchar2,va3 varchar2) return varchar2
is
vt varchar2(100);
type myy is table of varchar2(20);
va myy;
vc varchar2(100):='';
begin
vt:='select'||va1||'bulk collect into va'||'from'||va2;
Courier Ne
分享到:
相关推荐
Oracle 动态SQL是数据库编程中的一个重要概念,它允许在运行时构建和执行SQL语句,从而提高了灵活性和适应性。动态SQL的使用通常在处理不确定的查询结构、执行基于条件的DML操作或者需要根据运行时信息生成SQL语句时...
根据给定文件的信息,以下是对“Oracle动态SQL4方法分析与应用.pdf”文档中所涉及知识点的详细说明: Oracle动态SQL技术: 动态SQL技术允许在程序执行时根据用户的输入构造SQL语句,它在编写程序时不需要确定具体的...
Oracle数据库作为当前企业级应用中广泛使用的数据库系统之一,其提供的动态SQL功能允许开发者在程序运行时构造和执行SQL语句,这种灵活性为程序开发提供了极大的便利。本文将探讨Oracle中的动态SQL实现机制,重点...
oracle动态sql例子,适用于存储过程中拼接sql
在Oracle数据库管理中,动态执行SQL语句是一种强大的功能,允许开发者在运行时构建和执行SQL语句,这对于处理不确定或变化的数据结构尤其有用。本文将深入探讨Oracle中动态执行SQL的四种主要方法,并通过具体示例...
Oracle数据库系统提供了对动态SQL的支持,这是一种在程序运行时构建和执行SQL语句的编程技术,对于实现数据库操作的灵活性具有重要作用。本文将探讨Oracle本地动态SQL的使用方法和技巧。 动态SQL的使用场景广泛,它...
### 基于Oracle高性能动态SQL程序开发 #### 一、引言 在现代数据库管理系统中,Oracle以其强大的功能和广泛的适用性而受到许多企业和开发者的青睐。在Oracle的编程环境中,动态SQL作为一种灵活的解决方案,能够...
动态 SQL 技术是一种高级的程序设计技术, 在程序开发 时,不知道要使用哪些字段或查询条件,而在程序执行时才能 构造出来。 遇到这种情况时使用动态 SQL 技术就能很好的满 足要求,这种技术具有很好的通用性,功能...
"msmmPrj.rar_The Oracle_oracle dynamic sql"这个压缩包文件很可能包含了关于使用Oracle动态SQL的详细教程或项目代码,特别是通过SQLDA(SQL Descriptor Area)进行数据交互的方法。 SQLDA,全称为SQL描述符区域,...
### Oracle 动态 SQL 执行详解 在 Oracle 数据库中,动态 SQL 提供了一种灵活的方式来执行不预先定义好的 SQL 语句。这种方式允许开发者在运行时构建 SQL 语句并执行它们,这对于处理未知数据结构或需要动态生成...
oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具oracle SQL查询工具...
Oracle和SqlServer语法区别 Oracle和SqlServer是两种流行的关系型数据库管理系统,它们之间存在着一些语法区别。了解这些区别对于开发者来说非常重要,因为它可以帮助他们更好地迁移到新的数据库管理系统。下面将...
Oracle数据库中的动态SQL应用方法是开发高效数据库查询程序的关键技术之一。动态SQL允许在程序运行时根据需要构建和执行SQL语句,增强了程序的灵活性和适应性,特别适合处理不确定或变化的数据操作需求。本文主要...
在Oracle数据库的开发中,动态SQL扮演着重要的角色,尤其在处理不确定的或复杂的查询需求时。动态SQL与静态SQL的主要区别在于,静态SQL在编译时即确定了SQL语句,而动态SQL则在运行时根据条件构建和执行。Oracle的PL...
### Oracle SQL Developer 使用教程 #### 一、Oracle Database Home Page 的使用 在开始介绍 Oracle SQL Developer 的使用之前,我们先来看看如何使用 Oracle Database Home Page。这部分内容非常重要,因为它是...
Oracle与SQLServer的SQL语法差异,用简单易懂的语言和实例对Oracle和Sql Server语法之间的差异进行了对比分析,更加适用于入门的人
Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...
对ORACLE-SQL进行一些布局优化,更新它的格式
1. oraociei11.dll:这是Oracle Call Interface (OCI) 的动态链接库,是Oracle数据库访问接口的核心,用于应用程序与Oracle数据库交互。 2. orannzsbb11.dll:这是Oracle Net Services的缓冲区管理器,负责数据在...