当前位置:  数据库>oracle
本页文章导读:
    ▪Oracle PL/SQL中的循环处理          今年春节算是休了个长假,调整好心态,迎接新一年的挑战。    今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR.........
    ▪PL/SQL DEVELOPER中查询结果复制出来中文乱码的解决方案      PL/SQL DEVELOPER中查询结果导出到EXCEL时中文显示正常,但直接复制出来中文显示为乱码,如何?解决方案:切换到中文输入法状态,再复制,即可。本文链接......
    ▪数据库 20 条设计实践      使用明确、统一的表名和列名,例如 School、SchoolCourse、CourceID。表名使用单数,而不是复数,例如 StudentCourse,而不是 StudentCourses。表名不要使用空格。表名不要使用多余的前缀或后缀,例如.........

[1]Oracle PL/SQL中的循环处理
    来源:    发布时间: 2013-10-29

    今年春节算是休了个长假,调整好心态,迎接新一年的挑战。

    今天来说下Oracle中的循环迭代处理,因为从自己的博客统计中看到,不少网友都搜索了关键字"SQL FOR循环",所以打算在这里说下个人的理解。

    PL/SQL也和我们常用的编程语言一样,提供了While、For等循环,我们建几个例子来说明演示下。

    首先是While循环:

--while循环
procedure loop_while
(
start_value in number,
end_value in number
)
is
current_value number := start_value;
begin while current_value <=end_value
loop
dbms_output.put_line('now number:' || current_value);
current_value:=current_value+1;
end loop;
end loop_while;

指定循环的初始值和结束值之后,就可以看到将这2个值之间的数字一行行打印出来了;当然只要while循环条件的求值结果是true,循环就会继续下去,

如果求值条件为false或者null,循环就会终止。这个循环条件每执行一次循环体之前都会先进行判断,因此while循环并不能保证循环体一定能被执行。

所以如果我们无法提前预知所需要巡检的次数的情况下,就可以使用While来进行循环处理。

     For循环有2种,分别是数值型FOR循环和游标型FOR循环:

--数值型For循环
procedure loop_num_for
(
lowest in number,
highest in number
)
is
begin
FOR even_number in lowest .. highest --升序
loop
--处理非平滑增长的索引
if mod(even_number,2)=0
then
dbms_output.put_line('now number:' || even_number);
end if;
end loop;
end loop_num_for;

这种循环在开始的时候就已经知道循环的次数了,注意这里不需要声明循环索引,因为PL/SQL会自动隐式的用一个integer类型的局部变量作为它的循环索引;

如果要降序循环,必须加上reverse关键字,并且循环上边界和下边界的顺利无需改变:

FOR even_number in reverse lowest .. highest
loop
dbms_output.put_line('now number:' || even_number);
end loop;

另外需要说明的是,数值型FOR循环中,索引总是以1为单位递增或递减,所以如果我们的循环条件并非如此理想的平滑增长,我们就必须用一些逻辑代码或者技巧来

达到我们的目的。

      如果我们需要对很多行记录做处理时,就可以使用游标型FOR循环:

--游标型For循环
procedure loop_cursor_for
is
begin
declare cursor userinfo_cur is select * from userinfo_table;
begin
FOR userinfo_rec in userinfo_cur
loop
dbms_output.put_line('username is:' || userinfo_rec.user_name);
end loop;
end;
end loop_cursor_for;

当游标中的所有记录都取出来后,FOR循环就会自动终止,这里不用显示OPEN、CLOSE游标,PL/SQL引擎会自动处理。

上面的循环语句都可以用EXIT 或者 EXIT WHEN来终止其循环,但最好不要这样做,因为这样可能会造成循环的逻辑出现问题,最终造成SQL代码难于跟踪和调试。

本文链接


    
[2]PL/SQL DEVELOPER中查询结果复制出来中文乱码的解决方案
    来源:    发布时间: 2013-10-29

PL/SQL DEVELOPER中查询结果导出到EXCEL时中文显示正常,但直接复制出来中文显示为乱码,如何?

解决方案:切换到中文输入法状态,再复制,即可。

本文链接


    
[3]数据库 20 条设计实践
    来源:    发布时间: 2013-10-29

  • 使用明确、统一的表名和列名,例如 School、SchoolCourse、CourceID。
  • 表名使用单数,而不是复数,例如 StudentCourse,而不是 StudentCourses。
  • 表名不要使用空格。
  • 表名不要使用多余的前缀或后缀,例如使用 School,而不是 TblSchool,或者 SchoolTable 等等。
  • 数据库中的密码要加密,到应用中再解密。其实就是散列存储、单向加密。
  • 使用整数作为 ID 字段,也许现在没必要,但是将来需要,例如关联表,索引等等。
  • 使用整数字段做索引,否则会带来很大的性能问题 。
  • 使用 bit 作为布尔字段,使用整数或者varcha是浪费。同时,这类字段应该以“Is”开头。
  • 要经过认证才能访问数据库,不要给每一个用户管理员权限。
  • 尽量避免使用“select *”,而使用“select [required_column_list]”以获得更好的性能。
  • 假如程序代码比较复杂,使用 ORM 框架,例如 hibernate、iBatis。ORM 框架的性能问题可以通过详细的配置去解决。
  • 分割不常使用的数据表到不同的物理存储以获得更好的性能。
  • 对于关键数据库,使用安全备份系统,例如集群,同步等等。
  • 使用外键,非空等限制来保证数据的完整性,不要把所有的东西都扔给程序。
  • 缺乏数据库文档是致命的。你应该为你的数据库设计写文档,包括触发器、存储过程和其他脚本。
  • 对于经常使用的查询和大型数据表,要使用索引。数据分析工具可以帮助你决定如何建立索引。
  • 数据库服务器和网页服务器应该放在不同的机器上。这回提高安全性,并减轻 CPU 压力。
  • Image 和 blob 字段不应该定义在常用的数据表中,否则会影响性能。
  • 范式(Normalization)要按照要求使用以提高性能。Normalization 做的不够会导致数据冗余,而过度 Normalization 会导致太多的 join 和数据表,这两种情况都会影响性能。
  • 多花点时间在数据库设计上,否则你将来会付出加倍的时间来偿还。
  •  

    Thanks @howechiang

    本文链接


        
    最新技术文章:
    ▪current online redo log缺失后的恢复
    ▪ORA-600 2662错误解决实例
    ▪ORA-00600 2662错误解决方法
    ▪Oracle Hidden Parameter:_allow_resetlogs_corruption
    ▪Oracle诊断事件列表
    ▪Oracle 隐含参数 _disable_logging 详解
    ▪ORA-00600 [2662]错误解决过程
    ▪Oracle里常见的执行计划
    ▪Oracle里另外一些典型的执行计划
    ▪Oracle服务器自动备份
    ▪Oracle固定SQL的执行计划(一)---SQL Profile
    ▪Oracle固定SQL的执行计划(二)---SPM
    ▪同一环境下新建Standby RAC库
    ▪Oracle快速克隆安装
    ▪Oracle单实例启动多个实例
    ▪Oracle的PLSQL别名中文出现乱码解决方法
    ▪ORA-00379: no free buffers available in buffer pool DEFAULT ...
    ▪RMAN-06023: no backup or copy of datafile 16 found to restor...
    ▪RMAN还原数据库报错问题解决案例
    ▪OEL6.8_X86平台部署Oracle 10gR2检测失败问题
    ▪Oracle 性能优化建议
    ▪Oracle SQL语句优化心得
    ▪Oracle慢SQL监控脚本实现
    ▪Oracle dblink 查询 tns:无法解析指定的连接标识...
    ▪Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结...
    ▪Linux6.6及以上版本配置Oracle ASM共享储存-UDEV
    ▪Oracle 12C 开启数据库归档模式
    ▪Solairs系统中配置Oracle 12c 开机启动
    ▪重建DBMS_STATS解决ORA-31626 ORA-21633以及ORA-04063 ORA...
    ▪Oracle ASMM 与AMM之间相互切换
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,