plsql相关内容

"ORA-04068:包的现有状态已被丢弃 ORA-04065:未执行、更改或删除存储过程

当我尝试在过程“CALLING_PROCEDURE_NAME"下执行过程“PROCEDURE_NAME"时出现以下错误.但是我的 PROCEDURE_NAME 已经处于有效状态并成功用于其他一些程序. ORA-04068:包的现有状态已被丢弃ORA-04065: 未执行、更改或删除存储过程 ""PROCEDURE_NAME""ORA-06508: PL/SQL: 找不到被调用的程序单元: ""P ..
发布时间:2021-12-24 16:25:40 数据库

将数据插入 Oracle 表的最快方法是什么?

我正在用 PL/SQL 编写数据转换,用于处理数据并将其加载到表中.根据 PL/SQL Profiler,转换中最慢的部分之一是实际插入目标表.该表只有一个索引. 为了准备加载数据,我使用表的行类型填充一个变量,然后将其插入到表中,如下所示: 插入 mytable 值 r_myRow; 似乎我可以通过执行以下操作来提高性能: 在插入过程中关闭注销 一次插入多条记录 ..
发布时间:2021-12-24 16:25:35 数据库

格式化清晰可读的 SQL 查询

我正在编写一些带有多个子查询和大量连接的 SQL 查询,无论是在子查询内部还是来自子查询的结果表. 我们没有使用视图,所以这是不可能的. 写完之后,我看着它,挠头想知道它在做什么,因为我无法理解它. 你使用什么样的格式来试图清理这样的烂摊子?也许是缩进? 解决方案 对于大型查询,我倾向于非常依赖使用 WITH 的命名结果集.这允许预先定义结果集,并使主查询更简单.命名结果 ..
发布时间:2021-12-24 16:25:28 其他开发

ORA-06502:PL/SQL:数字或值错误:字符串缓冲区太小

我尝试了以下代码的不同方式,例如取出 while 或 if,但是当我将两者放在一起(if 和 while)时,我总是在最后得到错误... 取消定义数字设置服务器输出接受数字提示“在 100 和 999 之间输入 #:"宣布我编号:= 1;一个字符(25);b 字符(1);c varchar2(10);d 号;开始c := №d := 长度(c);b := substr(c, i, ..
发布时间:2021-12-24 16:25:19 数据库

绑定变量和替换变量(我使用 && 输入)之间有什么区别?

这两个变量声明有什么区别? 1:num number:='&&num'; 2:变量num1个数; 因为在这两种情况下我都可以通过在其他文件中使用 &num 或 &&num 来引用 num,对于绑定变量 :num1. 此外,我还有一个困惑:以下陈述中是否有任何不同之处,它们都有效吗?它们的意思是否相同? 1:变量num1号; 2: var num1 number; ..
发布时间:2021-12-24 16:25:09 数据库

Pl/SQL- 从查询中获取列名

我在 Oracle 数据库 11g 中使用 Pl/SQL. 我正在编写一个函数,它将 select 语句作为参数 (varchar2).该函数使用 for 循环遍历行并将格式应用于特定列,并输出整个内容.基本上,我需要某种方法来获取列名,以便我可以将它们显示在顶部.我知道有多种方法可以对表执行此操作,但是由于传入了此查询,因此可能未选择所有列、可能已使用别名等. 有没有办法从这个查询中 ..
发布时间:2021-12-24 16:25:02 数据库

使用 utl_http &12c 上的钱包:证书验证失败

希望有人能发现我做错了什么,因为我要秃顶了. 我用过 utl_http &钱包在 11gR1 上调用 https 没有太多麻烦,但我们新的 12c 安装让我很伤心. 我尝试使用 oracle 钱包管理器和命令行导入受信任的证书,但没有成功.我知道 oracle 在缓存钱包方面可能很挑剔,所以我尝试了多个新会话,但都没有成功. 我已经为 *.presstogo.com、Geotru ..
发布时间:2021-12-24 16:24:47 数据库

在 Oracle 中删除大量数据

确切地说,我不是数据库人员,而且我的大部分数据库工作都与 MySQL 相关,所以如果这个问题中的某些内容非常幼稚,请原谅我. 我需要从大约有 1 亿行的 Oracle 表中删除 550 万行.我在临时表中拥有需要删除的行的所有 ID.如果只有几千行,我会这样做: DELETE FROM table_name WHERE id IN (SELECT id FROM temp_table);犯 ..
发布时间:2021-12-24 16:24:38 数据库

在 Oracle PL/SQL 中获取调用过程或函数的名称

有谁知道 PL/SQL 过程(在本例中为错误记录过程)是否有可能获得调用它的函数/过程的名称? 显然我可以将名称作为参数传入,但是进行系统调用或其他方式来获取信息会很好-如果不是从过程/函数中调用,它可以只返回 null 或其他内容. 如果没有这方面的方法,那很好 - 只是好奇是否有可能(搜索一无所获). 解决方案 有一个名为 OWA_UTIL 的包(在旧版本的数据库中默认不安 ..
发布时间:2021-12-24 16:24:30 数据库

我怎样才能创建一个“动态"的?WHERE 子句?

首先:谢谢! 我完成了我的另一个项目和一个大惊喜:现在一切正常:-)感谢 SO 的一些有帮助的思想家! 所以我开始下一个项目. 我想得到这样的东西: SELECT * FROM tablename WHERE field1=content AND field2=content2 ... 正如您所注意到的,这可能是一个很长的 where 子句.表名是一个不会改变的静态属性.fi ..
发布时间:2021-12-24 16:24:20 数据库

如何在 PL/SQL 中迭代日期范围

我需要编写一份报告,根据每个记录的日期范围生成汇总表. 表格数据:选项 start_date end_date选项 1 6/12/2009 6/19/2009选项 1 6/3/2009 6/13/2009opt2 6/5/2009 6/6/2009 我想要的基本上是这样的: 日期选项计数2009 年 6 月 1 日选项 1 02009 年 6 月 1 日 opt2 02009 年 6 月 2 ..
发布时间:2021-12-24 16:24:16 数据库

ORACLE SQL 日期范围交集

我有一个表 T1,它包含一个 NAME 值(不是唯一的)和一个日期范围(D1 和 D2 是日期)当 NAME 相同时,我们对日期范围进行联合(例如 B). 但作为结果 (X),我们需要对所有日期范围进行交集 编辑:表T1 名称 |D1 |D2一个 |20100101 |20101211乙 |20100120 |20100415乙 |20100510 |20101230C |20100 ..
发布时间:2021-12-24 16:24:11 数据库

我什么时候应该嵌套 PL/SQL BEGIN...END 块?

我在 BEGIN...END 块中随意地将代码的子部分分组,这似乎是正确的.大多数情况下,当我处理一个更长的存储过程并且需要在一个地方使用一个临时变量时,我将只为那部分代码声明它.当我想识别和处理为特定代码段引发的异常时,我也会这样做. 为什么应该在一个过程、函数或另一个更大的 PL/SQL 块中嵌套块的任何其他原因? 解决方案 当你想像这样在本地处理异常时: 开始for emp_ ..
发布时间:2021-12-24 16:24:07 数据库

CASE 和 COALESCE 短路评估适用于 PL/SQL 中的序列,但不适用于 SQL

CASE 和 COALESCE() 文档中描述的短路评估是否适用于在 SQL 中使用的序列?这似乎没有发生. Oracle 关于CASE的文档 声明: Oracle 数据库使用短路评估.对于一个简单的CASE 表达式...如果先前的 compare_expr 等于 expr,则 Oracle 永远不会评估 compare_expr.对于搜索的 CASE 表达式,如果前一个条件为真,数据 ..
发布时间:2021-12-24 16:23:58 数据库

在 PL/SQL 中循环 CURSOR 的 FETCH/FOR 之间的区别

我知道获取游标将使我能够访问诸如 %ROWCOUNT、%ROWTYPE、%FOUND、%NOTFOUND、%ISOPEN 之类的变量 ...但我想知道是否还有其他使用原因 打开-获取-关闭循环游标的指令 而不是 用 FOR 循环循环游标...(在我看来,这更好,因为它很简单) 你怎么看? 解决方案 从性能的角度来看,区别比 OMG Ponies 链接到的 Ti ..
发布时间:2021-12-24 16:23:53 数据库

Oracle PL/SQL 字符串比较问题

我有以下 Oracle PL/SQL 代码,从你们的角度来看可能已经生疏了: 声明str1 varchar2(4000);str2 varchar2(4000);开始str1:='';str2:='sdd';如果(str1str2)那么dbms_output.put_line('两个字符串不相等');万一;结尾;/ 这很明显,两个字符串str1和str2不相等,但是为什么'两个字符串不相 ..
发布时间:2021-12-24 16:23:47 数据库

PLSQL :NEW 和 :OLD

谁能帮助我理解何时在 PLSQL 块中使用 :NEW 和 :OLD,我发现很难理解它们的用法. 解决方案 您通常在 trigger 使用 :old 引用旧值和 :new 引用新值. 这里是上面链接的 Oracle 文档中的一个示例 CREATE OR REPLACE TRIGGER Print_salary_changes在 Emp_tab 上删除、插入或更新之前每行WHEN (n ..
发布时间:2021-12-24 16:23:39 数据库

在一个过程中调用另一个 PL/SQL 过程

我是 PL/SQL 的新手 &将不胜感激这方面的帮助.我创建了一个复制合同的程序.现在我想从这个过程中调用另一个过程,该过程将复制与我正在复制的合同相关的所有程序.一份合同可以有多个程序. 解决方案 您只需将过程的名称和参数放入代码中即可调用过程,例如 开始dbms_output.put_line('Demo');结尾; 或在一个过程中, 创建或替换程序演示作为开始dbms_outp ..
发布时间:2021-12-24 16:23:34 数据库