动态SQL,嵌套游标,INSTR,SendMail

本文介绍了一个用于发送库存警报详细报告的PL/SQL过程。该过程通过配置的邮件组向指定用户发送过期库存警告邮件,并包含了慢动比、ADS天数等关键指标的解释。

 

  1None.gifPROCEDURE send_detail_mail(
  2None.gif        p_single_user   IN   VARCHAR2,
  3None.gif        p_admin_user    IN   VARCHAR2,
  4None.gif        p_current_day   IN   DATE )
  5None.gif    IS
  6None.gif        conn                         UTL_SMTP.connection;
  7None.gif        v_current_day                DATE;
  8None.gif        v_html_header                VARCHAR28000 );
  9None.gif        v_html_body                  VARCHAR28000 );
 10None.gif        v_html_tail                  VARCHAR22000 );
 11None.gif        v_mail_suject                VARCHAR2255 );
 12None.gif        v_user_name                  VARCHAR260 );
 13None.gif        v_user_nick_name             VARCHAR260 );
 14None.gif        v_user_mail_address          VARCHAR2100 );
 15None.gif        v_html_log                   VARCHAR21000 );
 16None.gif        v_ro_site_group              VARCHAR2100 );
 17None.gif        v_ns_site_group              VARCHAR2100 );
 18None.gif        v_product_line_group         VARCHAR2200 );
 19None.gif        v_user_group                 VARCHAR2200 );
 20None.gif        v_get_mail_data_sql_string   VARCHAR2500 );
 21None.gif        v_ro_site                    VARCHAR2100 );
 22None.gif        v_ns_site                    VARCHAR2100 );
 23None.gif        v_mail_data                  CLOB;
 24None.gif        v_get_mail_data_sql          VARCHAR2500 );
 25None.gif        v_send_mail_sql              VARCHAR2500 );
 26None.gif    BEGIN
 27None.gif        ----initial v_currentday
 28None.gif        v_current_day := NVL( TRUNC( p_current_day ), TRUNC( SYSDATE - 1 ));
 29None.gif        v_html_header := '';
 30None.gif        v_html_tail :=
 31None.gif               '<ul><font class="inf">'
 32None.gif            || '<li>slow moving ratio =  over 15 days inventory qty / total in warehouse inventory qty(not include MIT)</li>'
 33None.gif            || '<li>ADS days (Historic) =inventory qty*30/ prior 30 ship qty</li>'
 34None.gif            || '<li>ADS days (Forecast)=inventory qty*28/ next 4-week forecast </li>'
 35None.gif            || '<li>NFP : No Forecast Provided or available on Demand Forecast System</li>'
 36None.gif            || '<li>Resource : EIS/DFS</li>'
 37None.gif            || '<li>For BQP business model concern, we put BQP finish goods in service warehouse in "Non-Saleable" section on this report</li></ul><br>'
 38None.gif            || ' <FONT face=Arial color=#000080 size=2><STRONG>Information Support Department</STRONG></FONT><br>'
 39None.gif            || ' <FONT face=Arial color=#000080 size=2><STRONG>'
 40None.gif            || TO_CHAR( SYSDATE, 'YYYY-MM-DD' )
 41None.gif            || '</STRONG></FONT>';
 42None.gif        v_mail_suject :=
 43None.gif                       'Inventory Alert : Over-aged inventory-Action Required';
 44None.gif        v_html_log := '';
 45None.gif 
 46None.gif        --send mail by mail group
 47None.gif        DECLARE
 48None.gif            CURSOR cur_detailed_group
 49None.gif            IS
 50None.gif                SELECT '''' || REPLACE( ro_site,
 51None.gif                                        ',',
 52None.gif                                        ''',''' ) || '''',
 53None.gif                       '''' || REPLACE( ns_site,
 54None.gif                                        ',',
 55None.gif                                        ''',''' ) || '''',
 56None.gif                       '''' || REPLACE( product_line,
 57None.gif                                        ',',
 58None.gif                                        ''',''' ) || '''',
 59None.gif                       '''' || REPLACEuser_id,
 60None.gif                                        ',',
 61None.gif                                        ''',''' ) || ''''
 62None.gif                  FROM eis_hq_invhl_mail_group
 63None.gif                 WHERE report_type = 'Detailed';
 64None.gif        BEGIN
 65None.gif            OPEN cur_detailed_group;
 66None.gif 
 67None.gif            LOOP
 68None.gif                FETCH cur_detailed_group
 69None.gif                 INTO v_ro_site_group, v_ns_site_group, v_product_line_group,
 70None.gif                      v_user_group;
 71None.gif 
 72None.gif                EXIT WHEN cur_detailed_group%NOTFOUND;
 73None.gif 
 74None.gif                --get ro_site, ns_site
 75None.gif                DECLARE
 76None.gif                    CURSOR cur_ns_site
 77None.gif                    IS
 78None.gif                        SELECT DISTINCT ro_site, ns_site
 79None.gif                                   FROM eis_hq_invhl_mail_data
 80None.gif                                  WHERE report_type = 'Detailed'
 81None.gif                                    AND INSTR( v_ns_site_group, ns_site ) > 0;
 82None.gif                BEGIN
 83None.gif                    OPEN cur_ns_site;
 84None.gif 
 85None.gif                     --EXECUTE IMMEDIATE v_sql;
 86None.gif                     --BEGIN
 87None.gif                    -- OPEN cur_mail_site;
 88None.gif                    LOOP
 89None.gif                        FETCH cur_ns_site
 90None.gif                         INTO v_ro_site, v_ns_site;
 91None.gif 
 92None.gif                        EXIT WHEN cur_ns_site%NOTFOUND;
 93None.gif                         -- DBMS_OUTPUT.put_line( v_ro_site || ' ----------- '
 94None.gif                        --                        || v_ns_site );
 95None.gif                          --Saleable
 96None.gif                          --title
 97None.gif                        v_get_mail_data_sql :=
 98None.gif                               'select STRING_AGGREGATE_FUN(mail_data) from eis_hq_invhl_mail_data where ns_site = '''
 99None.gif                            || v_ns_site
100None.gif                            || '''and wh_type = ''Saleable''and report_type = ''Detailed'' and product_line in ('
101None.gif                            || v_product_line_group
102None.gif                            || ') group by ns_site';
103None.gif 
104None.gif                        --DBMS_OUTPUT.put_line( v_product_line_group );
105None.gif                        --DBMS_OUTPUT.put_line( v_sql );
106None.gif                        EXECUTE IMMEDIATE v_get_mail_data_sql
107None.gif                                     INTO v_mail_data;
108None.gif                    --Non-Saleable
109None.gif                    --title
110None.gif 
111None.gif                    -- DBMS_OUTPUT.put_line( v_product_line );
112None.gif                    END LOOP;
113None.gif                --DBMS_OUTPUT.put_line( v_ro_site || ' ----------- ' || v_ns_site );
114None.gif                END;
115None.gif 
116None.gif                           
117None.gif                DECLARE
118None.gif                    CURSOR cur_send_mail
119None.gif                    IS
120None.gif                        SELECT DISTINCT email, attribute2
121None.gif                                   FROM wscuser
122None.gif                                  WHERE INSTR( v_user_group, userid ) > 0;
123None.gif                BEGIN
124None.gif                    OPEN cur_send_mail;
125None.gif 
126None.gif                    LOOP
127None.gif                        FETCH cur_send_mail
128None.gif                         INTO v_user_mail_address, v_user_nick_name;
129None.gif 
130None.gif                        EXIT WHEN cur_send_mail%NOTFOUND;
131None.gif                        conn :=
132None.gif                            eis_mail_pkg.begin_mail
133None.gif                                     ( sender =>           'e@163.com',
134None.gif                                       recipients =>       'Sammy@163.com',
135None.gif                                       subject =>          'EIS INVHL',
136None.gif                                       mime_type =>        'text/html;charset=utf-8' );
137None.gif                        eis_mail_pkg.write_mb_text( conn, v_html_tail );
138None.gif                        eis_mail_pkg.end_mail( conn );
139None.gif                    END LOOP;
140None.gif                END;
141None.gif            END LOOP;
142None.gif        END;
143None.gif    END;
144None.gif
145None.gif
内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值