一:如何使用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. Linux下PHP的完全卸载

    如果想把PHP彻底的卸载干净,直接用yum的remove命令是不行的,而需要查看有多少rpm包,然后按照依赖顺序逐一卸载,在网上查了好多,都是通过  "rpm -qa | grep php& ...

  2. 虚机centos和本机Windows之间文件的拷贝无法用xftp时用FileZilla也行

    步骤如下: 1.如果Centos没有安装ssh,则需要先安装: 2.查看虚拟机中IP地址,命令如下: ifconfig 3.在windows中安装ftp软件 FileZilla启动软件如图: 6  这 ...

  3. varnish 内置函数详细说明

    Subroutine列表 •vcl_recv 在请求开始时候被调用,在请求已经被接收到并且解析后调用.目的就是决定是否处理这个请求,怎么处理,使用哪个后端.vcl_recv以return结束,参数可以 ...

  4. redhat6.5修改yum为163源

    把需要的安装包和配置文件打包,将命令整合到sh文件中,下载后解压运行yun_config.sh 即可 下载链接

  5. 使用FlaycoBanner实现图片轮播效果(加载网络图片)

    FlaycoBanner是一个开源图片轮播框架,支持android2.2及以上: git地址:https://github.com/H07000223/FlycoBanner_Master 在andr ...

  6. onTouch与onClick冲突解决方法

    view.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent ...

  7. 第七章 LED 将为我闪烁:控制发光二级管

    在上一章中了解到驱动程序的开发步骤,并一个实列来演示如何开发一个完整的驱动.但这个驱动只是简单的演示了实现步骤.真正的驱动需要与硬件直接进行相互交互.这节完整的演示驱动程序,控制开发板上的4个led灯 ...

  8. CSS前5课总结

    CSS<精通CSS.DIV网页样式与布局>视频前5课总结: 地对地导弹 第一课: 使用CSS控制页面: 1,行内样式 <p style="color:#0000FF; fo ...

  9. Max Points on a Line

    Given n points on a 2D plane, find the maximum number of points that lie on the same straight line. ...

  10. JSON入门

    一.简介     1.描述         1)JavaScript 对象表示法(JavaScript Object Notation) 2)存储和交换文本信息的语法.类似 XML 3)比 XML 更 ...