在oracle11g中创建参数化视图

2023-12-22

我有一个带有嵌套和左连接的大查询,我需要从中创建一个视图,以免从应用程序中运行它。问题是我需要日期范围和其他一些字段作为输入参数,因为每个请求的前端都会有所不同。 我刚刚查了一下,看到一些帖子提到使用 SYS_CONTEXT 进行参数化视图,并且需要确切地知道如何创建视图,例如使用 2 个参数 -fromdate, todate以及我如何从应用程序调用视图。

仅供参考,我正在使用 grails/groovy 来开发应用程序。 这是我想创建视图的查询..

 select 
    d.dateInRange as dateval,
    eventdesc,
    nvl(td.dist_ucnt, 0) as dist_ucnt
from (
    select 
        to_date(fromdate,'dd-mon-yyyy') + rownum - 1 as dateInRange
    from all_objects
    where rownum <= to_date(fromdate,'dd-mon-yyyy') - to_date(todate,'dd-mon-yyyy') + 1
) d
left join (
    select 
        to_char(user_transaction.transdate,'dd-mon-yyyy') as currentdate,
        count(distinct(grauser_id)) as dist_ucnt,
        eventdesc 
    from
        gratransaction, user_transaction 
  where gratransaction.id = user_transaction.trans_id and 
  user_transaction.transdate between to_date(fromdate,'dd-mon-yyyy') and to_date(todate,'dd-mon-yyyy') 
    group by  to_char(user_transaction.transdate, 'dd-mon-yyyy'), eventdesc 
) td on td.currentdate = d.dateInRange order by d.dateInRange asc

上下文方法描述如下:http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm http://docs.oracle.com/cd/B28359_01/network.111/b28531/app_context.htm

例如(示例改编自上面的链接)

CREATE CONTEXT dates_ctx USING set_dates_ctx_pkg;

CREATE OR REPLACE PACKAGE set_dates_ctx_pkg IS 
  PROCEDURE set(d1 in date, d2 in date); 
END; 
/

CREATE OR REPLACE PACKAGE BODY set_dates_ctx_pkg IS
  PROCEDURE set(d1 in date, d2 in date) IS 
  BEGIN 
    DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd1', TO_CHAR(d1,'DD-MON-YYYY'));
    DBMS_SESSION.SET_CONTEXT('dates_ctx', 'd2', TO_CHAR(d2,'DD-MON-YYYY'));
  END;
END;
/

然后,在您的应用程序中设置日期:

BEGIN set_dates_ctx_pkg.set(mydate1, mydate2); END;
/

然后,使用以下命令查询参数:

SELECT bla FROM mytable
WHERE mydate
  BETWEEN TO_DATE(
            SYS_CONTEXT('dates_ctx', 'd1')
          ,'DD-MON-YYYY')
      AND TO_DATE(
            SYS_CONTEXT('dates_ctx', 'd2')
          ,'DD-MON-YYYY');

这种方法的优点是查询非常友好;运行时不涉及 DDL 或 DML,因此无需担心事务;而且它非常快,因为它不涉及 SQL - PL/SQL 上下文切换。

或者:

如果上下文方法和 John 的包变量方法对您来说不可行,另一种方法是将参数插入到表中(例如,如果您在同一会话中运行查询,则为全局临时表),然后联接到该表从视图上看。缺点是您现在必须确保在想要运行查询时运行一些 DML 来插入参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在oracle11g中创建参数化视图 的相关文章

  • 如何在 Rails 中格式化日期时间?

    在我的 Rails 视图中 我有以下显示日期时间的代码 该行的结果如下 2013 02 02 01 00 00 UTC 我该如何更改它 使其显示为 2 2 13 X 00 PST 使用红宝石的strftime 关于日期 日期时间 看一下文档
  • Oracle PLSQL 将日期时间截断为 15 分钟块

    我想将我的数据聚合成 15 分钟的片段 一刻钟 为此 我编写了一些生成 15 分钟日期时间块的代码 SELECT TRUNC SYSDATE hh 0 25 24 ROWNUM 0 25 24 AS time start ROWNUM TR
  • Oracle 事务在 C++ 和 Java 之间的传播

    我们有一个现有的 C 应用程序 我们将逐步将其替换为新的基于 Java 的系统 在我们用 Java 完全重新实现所有内容之前 我们期望 C 和 Java 必须相互通信 RMI SOAP 消息传递等 我们尚未决定 现在我的经理认为我们需要 J
  • 我可以使用 VBA 将密码“传递”到 Excel 中的外部数据库连接吗?

    我正在尝试使用 VBA 隐藏我在 Excel 工作表中设置的数据连接的密码 由于 Excel 以纯文本形式存储外部数据源的密码 因此我想让 VBA 调用表的刷新并提供密码 我录制了刷新表格并输入密码的宏 但令我沮丧的是 它似乎省略了密码部分
  • 从 CTE 插入

    WITH DTL AS SELECT CMPI CODE CMN CDTY MTRL CMI WT FACTOR CMI CNTRCT RATE PL PRESENT PRICE TRM CODE ROUND NVL PRESENT PRI
  • 如何在oracle中获取表作为输出参数

    我正在尝试将 Oracle 过程调用的 out 参数强制转换为对象 它不起作用 因为 据我了解 我需要定义一个映射 它告诉方法如何转换它 如果地图为空或未正确填充 则它默认为 STRUCT 类型的对象 在我的情况下这是错误的 我已经构建了一
  • oracle to_date 转换显示文字与字符串格式不匹配

    如果我使用 unixtime 转换器 我会得到 2005 年 5 月 31 日星期二 16 23 17 GMT 1117556597 如果我运行以下查询 则会收到错误 文字与字符串格式不匹配 这是为什么 select to date 111
  • 从 C# 使用 Odbc 调用 Oracle 包函数

    我在 Oracle 包中定义了一个函数 CREATE OR REPLACE PACKAGE BODY TESTUSER TESTPKG as FUNCTION testfunc n IN NUMBER RETURN NUMBER as be
  • 将十六进制转换为字符串

    我想用HEXTORAW 从 ASCII 十六进制代码 30 获取 char 值 ASCII HEX 30 应返回 varchar 0 该怎么做呢 是HEXTORAW 正确的功能 你可以使用utl raw http docs oracle c
  • 如何在 Hibernate 中使用 Oracle 查询提示

    我试图在 Hibernate 中使用 Oracle 提示来调用强制索引 但在 Hibernate 3 6 10 Final 中没有找到任何合适的 API 我以某种方式尝试了 Hibernate 标准中的预测 proList add Proj
  • SQL使用多个/相关列计算项目频率?

    我对 SQL 完全陌生 并且阅读了有关 SQL 的 StackOverflow 帖子来尝试弄清楚这一点 以及其他来源 但无法在 SQL 中执行此操作 开始 我有一个 3 列和数千行的表 其中包含前 2 列的数据 第三列当前为空 我需要根据第
  • 如何在 Visual Studio 2008 中设置默认 XAML 视图

    在 Visual Studio 2008 中 当您向 WPF 应用程序项目添加新的 XAML 窗口时 您获得的默认视图是 拆分视图 其中可视化设计器和 XAML 代码在同一文档中显示在另一个之上 我更喜欢另一种视图 您可以通过双击 设计 或
  • 在 SSIS 2012 中为 Oracle CLOB 转换 DT_TEXT

    我正在使用 SSIS 2012 我有一个带有 DT TEXT 类型的输出列的脚本组件 它是来自网页的 XML 我有一个 OLE DB 目标 使用 OLE DB 的本机 OLD DB Oracle 提供程序 并且该字段的表定义为 CLOB 这
  • MySQL中是否有类似Oracle中“level”的函数[重复]

    这个问题在这里已经有答案了 我面临一个场景 如果输入是 10 我想要一个数字序列 1 2 3 10 在甲骨文中levelfunction 提供了该功能 我想知道如何在 MySQL 中执行相同的任务 谢谢 您可以在 mysql 中使用此查询
  • Power BI 中的区分大小写

    我想知道是否可以在 Power BI 中配置区分大小写 我在 Oracle 数据库中有数据 其中主键EXample不同于exampLE 但如果我想将其导入到Power BI中 就不行了 任何想法 目前 我认为最好的选择是在查询编辑器阶段为主
  • Oracle/PHP - ORA-00911 更新时的无效字符

    我正在运行一个 PHP 脚本 该脚本从 Oracle 数据库实例更新表 首先 我收到一个 JSON 对象 lot KLMHA17N9N00 requestor B10078 id FRESHLOT username B26696 passw
  • 使用绑定和空值命中 Oracle 索引的最佳查询

    我有一个表 该表在多个列上有一个索引 其中许多列可以为空 CREATE UNIQUE INDEX UX MYTABLE A B C D E ON MYTABLE A B C D E 现在 我在 C 代码中尝试检查该表并精确命中索引 对于每个
  • 在 Oracle 中使用触发器记录对表的更改

    我的一门课有一个项目 当我们的两个表发生更改时 我们需要创建一个日志 插入 更新 删除 我们需要使用Oracle触发器和PL SQL 在日志文件中 我们需要记录用户ID 日期时间 IP地址和事件 插入 更新 删除 我知道如何设置触发器 但我
  • 使用 JPA 时如何在部署时设置序列的架构名称?

    出于安全原因 我们的 Oracle 数据库对象通常属于与登录用户不同的架构 例如 表位于 xx core 中 我们登录的用户是 xx app yy 在我的 persistence xml 中 我定义了一个 orm 文件 以便我可以在部署时指
  • Oracle 数据库 12c 尝试连​​接时出错:网络适配器无法建立连接

    我第一次安装Oracle数据库12c 我正确地遵循了所有步骤并将其安装在 Windows 7 64 位上 但是当我单击 SQL Developer 并尝试创建新连接时 我输入了用户名和密码等信息 最后单击 测试 按钮 我得到了这个错误消息

随机推荐

  • LINQ to SQL - 没有可用的添加方法

    我创建了一个 LINQ to SQL 数据上下文 其中包含一个数据表 我试图简单地将一条新记录插入该表中 我遇到的问题是 LINQ 没有提供 Add 方法来传递新记录 我见过无数有 Add 方法的例子 但我似乎无法理解它 我完全错过了什么还
  • 当 Node 后端 (MongoDB) 中的状态发生变化时通知 Angular 前端

    当 MongoDB 中的状态发生变化时 我希望实时更新 Angular 前端 我的选择是什么 除了例如 还有其他方法吗 使用socket io 场景 用户创建提醒 设置电子邮件到达其邮箱的日期 现在 为了添加和删除提醒 我可以在前端模拟实时
  • Android EditText 空间验证

    我的 Android 应用程序中有一个 Edittext 我不想允许用户输入第一个空格字符 但是输入其他字符后用户也可以输入空格 I used
  • 告诉 Ctags 不要解析评论中的内容

    当我生成 ctags 文件时 它似乎也在解析注释中的内容 例如 使用 Vim 的插件 Tagbar 我可以在函数列表中看到不存在的函数 例如 is in just 这里发生的情况是 ctags 正在进入评论并发现以下内容 This func
  • 如何使用 CSS 使某个区域不可点击?

    假设我有包含一些链接和图像的包装 div 有什么方法可以仅使用 CSS 立即停用它吗 审查答案后 我放弃了只用 CSS 就能实现的想法 jQuery blockUI 插件就像魅力一样 有一个 CSS 规则 pointer events no
  • Laravel:如何从查询结果中获取模型?

    假设我有一个查询 除其他外 返回用户 ID 该查询是使用DB table 而不是使用模型 因此 我得到了一个集合 其中包含每个检索到的行的数组 如下所示 user id calculated data 1 123 2 111 3 222 假
  • 防止 lxml 在 ` 中转义 & 符号 ` 写入文件时

    我需要向现有 XML 元素添加一个属性 该属性必须包含 实体内的字符 例如 x0d 将修改后的 XML 写入文件时 变成 amp 从而摧毁该实体 import lxml etree as et e et Element a e set at
  • 基于公共密钥分析数据的简单方法

    处理映射到特定键的所有记录并输出该数据的多个记录的最简单方法是什么 例如 综合示例 假设我的密钥是日期 值是带有测量温度的当天时间戳 我想将一天内的温度分为高 平均 低 同样 低于 高于平均值 1 个标准偏差 输出将是具有新分类的原始温度
  • 在 Android 中创建和处理应用程序超时

    我想知道处理应用程序超时的最佳方法是什么 例如 PayPal 我希望用户选择 1 5 或 15 分钟的超时时间 这样当他们打开应用程序时 他们必须再次登录 我的 onResume 方法 Override public void onResu
  • 按 15 分钟间隔对数据集进行分组

    我正在尝试为我们的内部公司系统建立平均会话量 问题是范围大约向后三个月 我想按 15 分钟间隔对这整组大数据进行分组 因此输出将如下所示 interval sess avg 12 00 12 15 300 12 15 12 30 350 e
  • FromBody 值获取 null

    这是 Asp Net Webform 应用程序这是我的 Apicontroller 中的 POST 方法 public void Post FromBody string value 我正在使用 fiddler 后期处理 我就是这么实验的
  • 更改 FloatingActionButton 的背景?

    我试图在 XML 中将 FAB 的背景设置为不同的颜色 我知道我可以在代码中做到这一点 但这也需要我进行大量不方便的重构
  • ListView 显示项目但不显示组

    我正在创建一个简单的模式对话框 其中包含列表视图 当我将项目添加为组的一部分时 项目将显示 但组标题不会显示 我一直在尝试在构造函数中使用一些虚拟对象 这是代码 Initialize and create columns public Co
  • SLICK 3.0 - 多个查询相互依赖 - db.run(action)

    我是 Slick 3 的新手 到目前为止我已经了解 db run 是异步调用 一旦 Future 返回 map 或 flatMap 就会运行 下面我的代码中的问题是所有子查询都不起作用 嵌套db run 从概念上讲 我没有得到什么 执行下面
  • 如何处理未跟踪的文件并提高 git status 性能

    我目前在 Mac 上 在 Git 2 35 1 中 当我克隆我的存储库时 枚举未跟踪的文件花了 7 秒 当我这样做时time git status 大约花了2秒 而且 当我签出到其他分支时 大约需要 15 秒 当我签出回我的主存储库时 大约
  • SQL Server bacpac 在最新更新中本地导入失败(在线索引操作只能在 SQL Server 企业版中执行)

    我有一个 SQL Azure 数据库并在 SQL Server Management Studio 中连接到它 我导出数据层应用程序 然后导入数据层应用程序 bacpac文件以将其放入我的 localdb 中 或者我使用任务 部署数据库 不
  • 有没有办法根据不同列中的离散变量制作 matplotlib 散点图标记或颜色?

    我正在使用 matplotlib 从 DF 中制作散点图 为了为每个数据集获取不同的颜色 我对 plt scatter 进行了两次单独的调用 plt scatter zzz HFmV zzz LFmV label dut groups 0
  • 无缝音频循环到任意位置

    我最喜欢 MOD 格式的事情之一是能够循环回到歌曲中的任何给定点 这使其非常适合具有 前奏 和 主循环 的歌曲 当然MP3做不到这一点 到目前为止 我已经做了这样的事情
  • 如何用Python绘制时间序列热图? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想绘制一个图表 其中 x 轴作为时间轴 y 轴作为其值 颜色将指示其频率 频率越高 颜色越深 我认为您正在寻找二维直方图 impor
  • 在oracle11g中创建参数化视图

    我有一个带有嵌套和左连接的大查询 我需要从中创建一个视图 以免从应用程序中运行它 问题是我需要日期范围和其他一些字段作为输入参数 因为每个请求的前端都会有所不同 我刚刚查了一下 看到一些帖子提到使用 SYS CONTEXT 进行参数化视图