一:如何使用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. UE4 执行Console Command ----ExecuteConsoleCommand

    void UKismetSystemLibrary::ExecuteConsoleCommand(UObject* WorldContextObject, const FString& Com ...

  2. react native 之上传文件

    最近遇到react native中需要上传一些图片到后台.期间,找了一些第三方上传插件,感觉不太好用,要么只支持一个平台,要么会对其他第三方造成影响,实在无奈.只能直接使用fetch上传.其中上传文件 ...

  3. PHP中CURL方法curl_setopt()函数的一些参数

    bool curl_setopt (int ch, string option, mixed value)curl_setopt()函数将为一个CURL会话设置选项.option参数是你想要的设置,v ...

  4. Protobuf C#教程 ThriftC#教程大合辑

    android与PC,C#与Java 利用protobuf 进行无障碍通讯[Socket] http://www.cnblogs.com/TerryBlog/archive/2011/04/23/20 ...

  5. 开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供) 【转】

    国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.com.cn/data ...

  6. 14——小心copying行为

    资源的copying行为决定对象的copying行为. 抑制copying行为,使用引用计数.

  7. python webdriver 自动化测试练习 1-- 在线调查

    __author__ = 'Mickey0s' # coding:utf8 from selenium import webdriver from selenium.webdriver.common. ...

  8. 自适应布局,响应式布局以及rem,em区别

    一.自适应和响应式 先说共同点: 两者都是因为越来越多的 移动设备( mobile, tablet device )加入到互联网中来而出现的为移动设备提供更好的体验的技术.用技术来使网页适应从小到大( ...

  9. java考核完的心得

    2015年8月13日     星期四      晴 今天上午我们考核了java,就是用Java语言写一个小型的管理系统.考核前的我信心满满,因为我本身是测试专业的,觉得在开发这方面对自己不用要求的那么 ...

  10. JDBC删除表数据

    delete 必须使用where 条件指定删除哪一行数据.通常用具有唯一性的主键进行标示. package qddx.JDBC; import java.sql.*; public class Del ...