oracle number 小数位最后的0会被自动去掉? 应该如何不让他自动去掉后面的0 如: number(6,4) 插入0.00

说实话,这还蛮有趣的。
上次遇到类似的工具,是一个报表工具,客户抱怨数据错误。
后来查了一下,发现是导出模板中的数字格式设置不正确。
默认设置是显示所有有效数字。
结果,有些数字相差甚远,例如 0.0001 或 1 .2 3 4 将其改回小数点后两位即可立即生效。

关键是这不是保存错误,只是显示时不遵守规则而已。
说白了,数字的数据存储和人们读报告是不一样的。
它可以精确地以二进制格式存储,但在显示时必须根据需要进行格式化。
如果你强制系统打印时显示两位小数,它就会按照你说的做,与存储容量无关。

我之前在系统中调试过类似的错误。
客户属于金融行业,对数值精度要求极高。
花了两天时间才改格式,很郁闷。
好在最终解决了,客户的报告直接标准化了。
我个人没有在高精度的计算机环境下运行过。
我记得数据在X左右,但我建议你检查一下具体的值范围。

oracle数据库怎么看sql的执行计划

嘿,如果你问我对Oracle实施计划的看法,我就告诉你我经历过的陷阱和我知道的技巧。

上周一位客户问我 SQL 运行缓慢的问题,所以我开始直接使用 PL/SQL Developer。
通常我点击文件->新建->解释计划窗口,然后直接输入SQL并运行它。
运行后,我可以看到成本是多少,基数(即行数)是多少,我心里就有了想法。
但你应该知道PL/SQL Developer有时会得到不完整的信息,特别是它不支持自动跟踪功能。
当我解析一个复杂的查询并单独使用工具查看它时,我感觉自己被蒙住了眼睛。
最后只好去找SQLPlus来弥补。

如您所见,PL/SQL Developer 速度很快,但有时您必须将它与 SQLPlus 一起使用。
你说的这两点是完全正确的。

我们先来说说SQLPlus。
最简单、最原始的方式就是开启autotrace,然后运行任何SQL,比如binary select;。
这种方法是最简单的,但它也有一个明显的缺点——你必须等待SQL运行完成才能看到计划。
上次我调优一个旧系统时,查询嵌套了七八层,光是等待它运行完成并得出计划就花了大约十分钟。
为了不浪费时间,有时您只想查看计划而不想实际运行它,因此您只需使用自动跟踪套件。
这至少可以节省一些时间。
虽然统计信息是空白,但至少给你列出了方案。

如果您已经知道特定 SQL 存在问题,只需使用计划解释,然后从表中选择 (DBMS_XPLAN.DISPLAY);。
这与直接在 PL/SQL Developer 中运行它相同。
但是,如果您像许多 DBA 一样,遇到诸如“系统速度慢”之类模糊的客户投诉,那么您需要首先找到罪魁祸首。
我通常使用这个查询:
sql 选择标题、SUBSTR(SQL_TEXT, 1 , 2 0) 文本、BUFFER_GETS、执行、BUFFER_GETS/执行平均值 来自 V$SQLAREA 其中 EXECUTIONS > 0 且 BUFFER_GETS > 1 00000 按 5 排序;
这可以帮助您检测频繁运行且具有大量 I/O 操作的 SQL 模块。
找到后,使用解释计划来查看它所分配到的计划。

更严重的是SQL Trace。
如果你想知道一条SQL语句从解析到执行到获取每个阶段消耗的资源,你应该使用这个。
我通常首先在会话中运行它,就像会话切换集一样sql_trace 为真;然后运行 ​​SQL 后将其关闭。
然后找到 .trc 文件并使用 tkprof 对其进行格式化。
我正在测试环境中调整存储过程。
运行后发现表扫描卡在那里,CPU超载。
感谢 tkprof,它列出了每个阶段所花费的时间,我知道哪个句子查询导致了问题。

当然,理解 tkprof 的输出有点困难,尤其是当您第一次开始使用它时。
我建议从简单的自动跟踪开始,掌握窍门后继续解释该计划,最后使用 SQL 跟踪。
你提到的事件1 004 6 实际上是一个更精确的SQL跟踪。
可以调整级别,比如更改会话组事件“1 004 6 context name trace permanent, level 8 ”;这个东西虽然比较高级,但是如果使用不当,会严重影响性能。
一般来说,我只在对生产系统进行紧急诊断时使用它。

总之,我们看一下实施方案。
没有灵丹妙药。
PL/SQL Developer速度快但信息不完整,SQLPlus功能多但操作稍复杂,SQL Trace最全面但难度最大。
你要根据情况来选择。
我还在思考一个问题,就是这些工具之间的区别。
哪个是“真相”?有时,PL/SQL 和 SQLPlus 开发人员演示计划的结果是不同的。
到底是怎么回事?我还在考虑……无论如何,这取决于你。