美文网首页
022-20180122-【数据库学习】设置断点、动态sql语句

022-20180122-【数据库学习】设置断点、动态sql语句

作者: DearLynne | 来源:发表于2018-01-22 13:01 被阅读0次

    O

            今天继续学习日账开发的相关程序,在学习过程中遇到了几个问题,通过向导师咨询以及在网上查阅资料后有所理解,今天的ORID主要记录以下几个问题:设置断点、动态sql语句以及between...and与>=的区别。

    R

            今天能较好地静下心来学习代码,感觉有进步,继续加油!

    I

            这几个知识点的介绍及具体使用方法如下:

            1.设置断点

            在日账开发的程序中,我发现每一个功能前都加入了断点:avc_break_point。当时我不太理解加入断点的具体原因,我就向导师请教。他向我解释道,这个断点主要用于记录错误发生的位置,结合以下这个函数来看,可以得知avc_break_point表示的错误发生位置,以及avc_err_text表示的错误信息。在查看log_day_error_t日志表时,可以看到如图1所示的ERROR_INFO包含了avc_break_point与log_day_error_t。

    函数:etl_day_report_alarm.program_log_create(str_proc_name,n_table_id,n_day_now,-1,n_start_time,sysdate,str_sql,avc_break_point||avc_err_text,0)

    图1 日志中显示的错误信息

            2.动态sql语句

            我从网上查阅资料得知,Oracle编译PL/SQL程序块包括前期联编(early binding)与后期联编(late binding),前者表示SQL语句在编译期间就已经确定;后者表示SQL语句只有在运行阶段才能建立。通常,静态SQL采用前期联编,而动态SQL采用后期联编。并且动态SQL是通过损失一些系统性能来获得灵活性。一般动态SQL常用于:执行SQL数据定义语句(例如:create   table  ..,alter   table  ,drop  table)、执行数据控制語句(例如:grant...)、一个会话控制(例如:alter  session)等等。其具体语法为:

            execute immediate"sql语句";

            例如对于如下所示的动态语句,删除表stat_day_report_t中满足table_id为90020030以及stat_date为n_day_now的行。

    str_sql:='delete from stat_day_report_t a where a.table_id=90020030 and a.stat_date='''||n_day_now||'''';

     EXECUTE IMMEDIATE str_sql;

            3. between...and与>=的区别

            举例说明,对于筛选出2018年1月11日及以后的数据,以下两种语法都可以实现,但若在后期进行回溯时两种语法就会有所差别。语法二只能统计2018年1月11日及以后全部数据,而语法一可以通过修改n_day_now的值来改变统计的区间,例如统计2018年1月11日至2018年1月15日、2018年1月21日的数据,这样能够提高程序的适用性。所以在以后编程中,我们应该注意细节的处理,以提高工作效率。

    语法一:a.yyyymmdd between '20180111' and ''||n_day_now||'' 

    语法二:a.yyyymmdd >= '20180111' 

    D

            每天继续学习日账开发相关程序的编写与维护,记录其中的重难点问题。

    相关文章

      网友评论

          本文标题:022-20180122-【数据库学习】设置断点、动态sql语句

          本文链接:https://www.haomeiwen.com/subject/yuflaxtx.html