网站首页 > 技术文章 正文
文中使用的Oracle版本为10g。
这众所周知,视图(view)中是不能直接使用变量的,但视图可以调用包(package),那我们可以改变使用方式,通过package为视图传参。
第一步:创建全局变量(简单的get/set方法)
create or replace package p_countyarea_param is
--为视图创建变量
function set_param(datetime varchar2) return varchar2;
function get_param return varchar2;
end p_countyarea_param;
在package中先定义两个函数set_param和get_param,这种做法跟Java的getter/setter非常相似。 这里传一个类型为varchar2的变量datetime。
create or replace package body p_countyarea_param is
--记住日期时间的
paramValue varchar2(10);
function set_param(datetime varchar2) return varchar2 is
begin
paramValue := datetime;
return datetime;
end;
function get_param return varchar2 is
begin
return paramValue;
end;
end p_countyarea_param;
在package body中正式编写函数逻辑,在set_param函数中将datetime赋值给package body的全局变量paramValue,而在get_param函数获取的时候直接获取paramValue变量即可。 是不是很容易理解。
第二步:在视图中调用变量
create or replace view p_view_user as
select id,
realName,
address
from tbl_info
where id = p_countyarea_param.get_param();
可以看出在视图中是可以通过p_countyarea_param.get_param()给where条件对应的字段动态赋值的。
第三步:在查询中调用变量
select *
from p_view_user
where p_countyarea_param.set_param(<param>)=<param>
如上图所示,在调用视图的时候加上where条件,在where条件中为set_param内变量设值即可。
有同学可能会说创建视图(view)本就不应该带where条件以适配查询的,你这种做法不是多此一举吗?是的,如果是简单的调用当然不需要这样写下来了。这种做法主要是针对结构单一但动态组合的业务场景而诞生的,本方法也同样适用于多表连接且多表嵌套条件传递使用。
这是属于DBA级别的奇淫技巧。
猜你喜欢
- 2025-07-28 JDK高版本特性总结与ZGC实践(jdk高版本兼容低版本吗)
- 2024-10-30 深入理解 volatile 关键字 volatile关键字的应用场景
- 2024-10-30 JVM知识点总览:高级Java工程师面试必备
- 2024-10-30 关于Eclipse 无法安装高版本Tomcat的解决办法
- 2024-10-30 面试官:连 INSERT INTO SET 都不知道怎么用,你这3年都干些什么了?
- 2024-10-30 Java 14 新功能介绍 java技术介绍
- 2024-10-30 MySQL 避坑指南之隐式数据类型转换
- 2024-10-30 Oracle,SQL Server 数据库较MySql数据库,Sql语句差异
- 2024-10-30 Oracle中PL/SQL基本语法 oracle的pl/sql
- 2024-10-30 Oracle数据库扩展语言PL/SQL之Procedure
你 发表评论:
欢迎- 638℃几个Oracle空值处理函数 oracle处理null值的函数
- 630℃Oracle分析函数之Lag和Lead()使用
- 619℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 615℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 613℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 604℃【数据统计分析】详解Oracle分组函数之CUBE
- 592℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 577℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)