一:如何使用FOR循环
二:如何使用拼接语句 EXECUTE IMMEDIATE v_sql INTO v_WORK_ORDERID;
三:如何定义记录类型做为变量,用于存储及查询
CREATE OR REPLACE PACKAGE pkg_GenerateReport_biz IS
/*===============================================
* PROGRAM NAME: pkg_CSS_CUSTOMER_DELETE_SYNC_biz
*
* DESCRIPTION: ??????????????????
*
* HISTORY:
* 1.00 2016-07-28 chenli Creation
* ==============================================*/ PROCEDURE main(P_INV_ORGID decimal); END pkg_GenerateReport_biz;
/
CREATE OR REPLACE PACKAGE BODY pkg_GenerateReport_biz IS /* =============================================
* FUNCTION / PROCEDURE
* NAME :main
* DESCRIPTION:
??????????????
* ARGUMENT:
* RETURN:
*
* HISTORY:
* 1.00 2016-07-28 chenli Creation
* =============================================*/ PROCEDURE main(P_INV_ORGID decimal) IS v_SQL VARCHAR2(4000); --获取相关工单
v_SQL_UPDATE_OFFLINE VARCHAR2(4000); --更新下线完数 v_SYS_ROLES_CONFIG_row SYS_ROLES_CONFIG%ROWTYPE; --系统配置项
v_OQC_INSP_SAMPLE_RPT_row OQC_INSP_SAMPLE_RPT%ROWTYPE; --抽检报告
v_OQC_INSP_SAMPLE_RPT_SN_row OQC_INSP_SAMPLE_RPT_SN%rowtype;
v_WORK_ORDERID VARCHAR2(5000); --相关工单
str_production_date_from varchar2(50); --生产开始时间
str_production_date_to varchar2(50); --生产结束时间
begin
for v_rlt in (select *
from (select *
from oqc_inspection_sample s
where s.state = 'A'
AND S.status = '已检验'
and s.is_v2 = '1'
AND s.org_id = P_INV_ORGID
order by s.inspection_time desc)
where rownum <= 10) loop str_production_date_from := to_char(v_rlt.production_start_time,
'yyyy-mm-dd hh24:mi:ss');
str_production_date_to := to_char(v_rlt.production_end_time,
'yyyy-mm-dd hh24:mi:ss'); select *
INTO v_SYS_ROLES_CONFIG_row
FROM SYS_ROLES_CONFIG c
WHERE c.org_id = v_rlt.org_id
AND c.state = 'A'; v_WORK_ORDERID := '';
v_SQL := '';
v_SQL := v_SQL ||
'SELECT wm_concat( DISTINCT(O.MO_NAME)) FROM OQC_MES_INF_UL_QMS_OFFLINE O WHERE O.ORG_ID = ' ||
P_INV_ORGID ||
' AND O.DATETIME_OFFLINE>= to_date(''' ||
str_production_date_from ||
''',''yyyy-mm-dd hh24:mi:ss'') AND O.DATETIME_OFFLINE<=to_date(''' ||
str_production_date_to ||
''',''yyyy-mm-dd hh24:mi:ss'')'; IF v_SYS_ROLES_CONFIG_row.Sys_Parms1 = '同生产工单' THEN v_SQL := v_SQL || ' and O.MO_NAME=''' || v_rlt.WORK_ORDER_ID || ''''; elsif v_SYS_ROLES_CONFIG_row.Sys_Parms2 = '同物料编码' THEN v_SQL := v_SQL || ' and O.PRODUCT_CODE=''' || v_rlt.PROD_ID || ''''; elsif v_SYS_ROLES_CONFIG_row.Sys_Parms3 = '同产品型号' THEN v_SQL := v_SQL || ' and O.PRODUCT_TYPE=''' || v_rlt.PROD_MODEL_ID || ''''; elsif v_SYS_ROLES_CONFIG_row.Sys_Parms4 = '同产线' THEN
v_SQL := v_SQL || ' and O.LINE_DESC=''' || v_rlt.PRODUCTION_LINE || ''''; END IF; EXECUTE IMMEDIATE v_sql
INTO v_WORK_ORDERID; v_OQC_INSP_SAMPLE_RPT_row.User_Created := v_rlt.user_created;
v_OQC_INSP_SAMPLE_RPT_row.Datetime_Created := sysdate;
v_OQC_INSP_SAMPLE_RPT_row.Inspection_No := v_rlt.inspection_no;
v_OQC_INSP_SAMPLE_RPT_row.Org_Id := v_rlt.org_id;
v_OQC_INSP_SAMPLE_RPT_row.Inspection_Result := v_rlt.inspection_result;
v_OQC_INSP_SAMPLE_RPT_row.Workorderno := v_WORK_ORDERID;
v_OQC_INSP_SAMPLE_RPT_row.Ref_Sample_Id := v_rlt.id;
v_OQC_INSP_SAMPLE_RPT_row.Inspection_Type := '抽检';
v_OQC_INSP_SAMPLE_RPT_row.Id := SYS_GUID();
v_OQC_INSP_SAMPLE_RPT_row.State := 'A'; if v_rlt.inspection_result = '合格' then
v_OQC_INSP_SAMPLE_RPT_row.IS_UPDATE_MES := 'Y';
elsif v_rlt.inspection_result = '不合格' then
v_OQC_INSP_SAMPLE_RPT_row.IS_UPDATE_MES := 'N';
END IF;
--1、增加抽检报告表
INSERT INTO OQC_INSP_SAMPLE_RPT VALUES v_OQC_INSP_SAMPLE_RPT_row; --插入抽检报告
--2、插入抽检的条码
for v_title in (select *
from oqc_base_standrad_title t
where t.baseamine_id = v_rlt.Id
and t.is_insepection_result = '1'
and t.state = 'A') loop
v_OQC_INSP_SAMPLE_RPT_SN_row.Id := sys_guid();
v_OQC_INSP_SAMPLE_RPT_SN_row.Sn := v_title.barcode;
v_OQC_INSP_SAMPLE_RPT_SN_row.State := 'A';
v_OQC_INSP_SAMPLE_RPT_SN_row.Datetime_Created := SYSDATE;
v_OQC_INSP_SAMPLE_RPT_SN_row.Rpt_Id := v_OQC_INSP_SAMPLE_RPT_row.Id;
v_OQC_INSP_SAMPLE_RPT_SN_row.User_Created := v_rlt.User_Created;
INSERT INTO OQC_INSP_SAMPLE_RPT_SN
VALUES v_OQC_INSP_SAMPLE_RPT_SN_row; --插入抽检报告 end loop;
--3、更新下线完工表
v_SQL_UPDATE_OFFLINE := '';
if v_rlt.inspection_result = '合格' then
v_SQL_UPDATE_OFFLINE := v_SQL_UPDATE_OFFLINE ||
'update OQC_MES_INF_UL_QMS_OFFLINE O set
INSPECTION_RESULT=''' ||
v_rlt.INSPECTION_RESULT ||
''',O.BATCH_INSPECTION_RESULT=''' ||
v_rlt.INSPECTION_RESULT ||
''',O.BATCH_NO=''' || v_rlt.INSPECTION_NO ||
''',O.BATCH_DATETIME_CREATED=sysdate where ORG_ID=' ||
v_rlt.ORG_ID;
elsif v_rlt.inspection_result = '不合格' then
v_SQL_UPDATE_OFFLINE := v_SQL_UPDATE_OFFLINE ||
'update OQC_MES_INF_UL_QMS_OFFLINE O set
O.BATCH_DATETIME_CREATED=sysdate where O.ORG_ID=' ||
v_rlt.ORG_ID;
end if; v_SQL_UPDATE_OFFLINE := v_SQL_UPDATE_OFFLINE ||
' AND O.DATETIME_OFFLINE>= to_date(''' ||
str_production_date_from ||
''',''yyyy-mm-dd hh24:mi:ss'') AND O.DATETIME_OFFLINE<=to_date(''' ||
str_production_date_to ||
''',''yyyy-mm-dd hh24:mi:ss'')'; IF v_SYS_ROLES_CONFIG_row.Sys_Parms1 = '同生产工单' THEN v_SQL_UPDATE_OFFLINE := v_SQL_UPDATE_OFFLINE || ' and O.MO_NAME=''' ||
v_rlt.WORK_ORDER_ID || ''''; elsif v_SYS_ROLES_CONFIG_row.Sys_Parms2 = '同物料编码' THEN v_SQL_UPDATE_OFFLINE := v_SQL_UPDATE_OFFLINE ||
' and O.PRODUCT_CODE=''' || v_rlt.PROD_ID || ''''; elsif v_SYS_ROLES_CONFIG_row.Sys_Parms3 = '同产品型号' THEN v_SQL_UPDATE_OFFLINE := v_SQL_UPDATE_OFFLINE ||
' and O.PRODUCT_TYPE=''' ||
v_rlt.PROD_MODEL_ID || ''''; elsif v_SYS_ROLES_CONFIG_row.Sys_Parms4 = '同产线' THEN
v_SQL_UPDATE_OFFLINE := v_SQL_UPDATE_OFFLINE ||
' and O.LINE_DESC=''' ||
v_rlt.PRODUCTION_LINE || ''''; end if;
EXECUTE IMMEDIATE v_SQL_UPDATE_OFFLINE; --4、更新抽检表 update oqc_inspection_sample s
set s.is_inspector = '1',
s.status = '已生成报告',
s.datetime_report_generated = sysdate,
s.batch_no = v_rlt.inspection_no
where s.id = v_rlt.id
and s.org_id = v_rlt.org_id;
commit; --最后提交
end loop; end; END pkg_GenerateReport_biz;
/

  

oracle如何写包的更多相关文章

  1. ORACLE之UTL_FILE包详解

    1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录.      方法:        ...

  2. maven在windows下的安装配置及手动引入oracle数据库jar包

    一.maven的安装配置 注意:在进行如下配置之前,有个前提是你的java的jdk安装配置正确才行 1.首先,下载maven,网址http://maven.apache.org/download.cg ...

  3. Oracle数据库程序包全局变量的应用

    1 前言  在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患< ...

  4. Oracle 如何写出高效的 SQL

    转自:Oracle 如何写出高效的 SQL 要想写出高效的SQL 语句需要掌握一些基本原则,如果你违反了这些原则,一般情况下SQL 的性能将会很差. 1. 减少数据库访问次数连接数据库是非常耗时的,虽 ...

  5. Oracle DBA管理包脚本系列(二)

    该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...

  6. SQL强化(二) 在Oracle 中写代码

    一  : 关于查询中的转换 -- 字符串转换 一 : decode 函数 转换 SELECT DECODE ( PROTYPE.PRO_TYPE_DATE, 'L', '长', 'm', '短', ' ...

  7. 160322、Maven手动安装Oracle的jar包

    oracle的jar包 收费所以不能通过配置pom.xml获得,可以通过以下方法在pom.xml中引用 在命令行窗口执行(注意更改路径): mvn install:install-file -Dgro ...

  8. 使用Oracle的DBMS_SQL包执行动态SQL语句

    引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle ...

  9. oracle中utl_file包读写文件操作实例学习

    在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create ...

随机推荐

  1. final修饰的变量是引用不能改变,还是引用的对象不能改变???

    对于这个问题,我们不能只记结论,要拿实例说话,参看以下代码: public class Demo { public static void main(String[] args) { final St ...

  2. firefox浏览器中silverlight无法输入问题

    firefox浏览器中silverlight无法输入问题 今天用firefox浏览silverlight网页,想在文本框中输入内容,却没想到silverlight插件意外崩溃了.google一下,发现 ...

  3. utf8转gbk,libcurl中文乱码处理

    这两个转码在网页客户端处理用很常见,所使用的平台为VS2010,字符集采用多字节字符集 utf8转gbk string UTF8ToGBK(const std::string& strUTF8 ...

  4. 图片压缩工具optipng/jpegoptim安装

    [1]还未实践 #yum install optipng -y [2]已成功 #yum install -y libjpeg libjpeg-devel #wget http://freecode.c ...

  5. RunLoop笔记

    1.Runloop基础知识 - 1.1 字面意思 a 运行循环 b 跑圈 - 1.2 基本作用(作用重大) a 保持程序的持续运行(ios程序为什么能一直活着不会死) b 处理app中的各种事件(比如 ...

  6. jieba中文分词(python)

    问题小结 1.安装 需要用到python,根据python2.7选择适当的安装包.先下载http://pypi.python.org/pypi/jieba/ ,解压后运行python setup.py ...

  7. WCF XmlSerializer GetType 反射类型 报错 解决方案

    为图省事,用现有的EF,和web一起使用一个Model类 当进行到 XmlSerializer xmlSerializer = new XmlSerializer(obj.GetType()); 会报 ...

  8. 【转】浅思OC的语言特性

    算了算,学习IOS已经有一段时间了.今天花了点时间思考一下OC的语言特性,让自己的心不要那么浮躁,注重基础,回归本源. OC做为一门面向对象语言,自然具有面向对象的语言特性,如封装.继承.多态.他具有 ...

  9. Git 的详细使用

      本文翻译自Understanding Git Source Control in Xcode (译者myShire)欢迎您加入我们的翻译小组. 在应用程序开发过程中,很重要的一部分工作就是如何进行 ...

  10. HttpContext.Current.User is null after installing .NET Framework 4.5

    故障原因:从framework4.0到framework4.5的升级过程中,原有的form认证方式发生了变化,所以不再支持User.Identity.Name原有存储模式(基于cookie),要恢复这 ...