如何在sqlplus中查看,修改,执行缓存的SQL语句

说实话,我在银行做报表系统的时候,经常使用Oracle 1 0g的DBMS_XPLAN.DISPLAY_CURSOR函数。
想想看,数据仓库在那个时代才刚刚开始激增。
数千张表是相关的。
运行 ETL 查询需要很长时间。
最后发现是某个JOIN使用错误。
这简直是​​疯了。

该功能与DISPLAY最大的区别是DISPLAYCURSOR可以看到“热门”计划。
例如,如果您在开发环境中运行 SQL,则使用 DISPLAY 看到的内容就是 Oracle 估计的内容。
可以说全表扫描效率低下,但在实际执行中,一个小索引可能会突然失效。
这时候DISPLAYCURSOR就可以告诉你实际情况了。
我有一个案例,一列突然添加到某个表中,完全改变了查询计划。
未添加列时,显示看起来相同。
当我检查DISPLAYCURSOR时,这一切都发生了,因为统计数据没有更新。

参数,SQL_ID,我记得这个在共享数据库和表之前特别重要。
我们创建了一个临时报告来汇总来自数百个业务系统的数据。
结果,SQL 运行了 5 分钟。
在检查 V$SQL 时,我看到多个语句具有相同的 SQL_ID。
分析发现,不同系统中的表名有不同的case name,导致Oracle认为是不同的查询。
(我很少遇到cursor_child_no这个参数,临时查询一般不需要管游标)。

格式参数是最有趣的。
我们需要监控实时 I/O。
那时,服务器 I/O 总是在移动。
我们使用 DISPLAYCURSOR 和 iostats 格式。
我们发现有客户一早运行批处理时清空了所有统计信息,导致Oracle恢复使用预估计划,预估不正确。
在这个视图中,没有iostats就看不到,DISPLAY看起来很正常。
我测试过可以使用run_stats_last参数来查看最新的实际I/O执行情况,特别适合临时调试。
例如,如果运行一个查询,发现速度很慢,但系统负载不高,则可以使用run_stats_last来查看上次正常执行的I/O状态。

说实话,这个功能其实是在Oracle R2 版本之后对EXPLAIN PLAN FOR进行了改编。
后来去电信做大数据迁移的时候,遇到一个客户还在用老的1 0g系统。
我使用DISPLAYCURSOR,发现统计信息没有及时更新。
经过长时间的分析,我认为是硬件问题。
后来改用DBMS_STATS.GATHER_TABLE_STATS链接EXPLAIN PLAN,效果立竿见影。

我没有亲自测试的是format参数中提到的Allstats快捷方式在1 1 g之后是否仍然支持。
我记得当时测试过,但是由于系统环境的限制,我没有机会在1 2 c以上验证。
我记得Oracle官方文档里有提到过这个数据,但是没有具体数字。
尚未得到系统验证。

oracle sqlplus执行sql文件

等等,上周我在办公室的旧笔记本电脑上处理这个问题。
当时,系统磁盘几乎已满,SQLPlus 的运行速度就像老式拨号上网一样慢。
打开cmd并输入sqlplususer/pwd@servicename。
突然您意识到您输入了错误的密码,必须重新输入。
该文件位于D盘根目录(@D:\script.sql)。
执行后,仍然显示ora-00001 提示符。
经过长时间检查,我发现表名拼写错误,列名包含特殊符号。
说起来容易做起来难,但每次你都必须盯着闪烁的光标,担心你会再次拼错。

PL_sql如何执行oracle存储过程

直接给出结论。

1 . Select from ods_area 不能直接在 PL/SQL 中实现。
要使用 SELECT INTO PL/SQL 字段,表名的变量。
2 、格式化存储过程:创建或替换过程区-
声明变量;开始-
动作文本;端区; 3 . 代码使用“/”正确编译。
4 . 使用EXEC 或EXECUTE 调用编译后的存储过程。
示例: -
创建 创建或替换操作区域 号码号码; v_area记录双%ROWTYPE; 开始 -
示例 1 从 DUAL 中选择 v_area; -
示例2 从DUAL中选择命理学中的1 2 3 4 5 ; 端区; / -
通过/ -
致电 EXEC 区域;
就是这样。