oracle如何写包
一:如何使用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如何写包的更多相关文章
- ORACLE之UTL_FILE包详解
1 Utl_File包简介Oracle的UTL_FILE包用来实现对磁盘文件的I/O操作.(1)Oracle10g之前的版本需要指定utl_file包可以操作的目录. 方法: ...
- maven在windows下的安装配置及手动引入oracle数据库jar包
一.maven的安装配置 注意:在进行如下配置之前,有个前提是你的java的jdk安装配置正确才行 1.首先,下载maven,网址http://maven.apache.org/download.cg ...
- Oracle数据库程序包全局变量的应用
1 前言 在程序实现过程中,经常用遇到一些全局变量或常数.在程序开发过程中,往往会将该变量或常数存储于临时表或前台程序的全局变量中,由此带来运行效率降低<频繁读取临时表>或安全隐患< ...
- Oracle 如何写出高效的 SQL
转自:Oracle 如何写出高效的 SQL 要想写出高效的SQL 语句需要掌握一些基本原则,如果你违反了这些原则,一般情况下SQL 的性能将会很差. 1. 减少数据库访问次数连接数据库是非常耗时的,虽 ...
- Oracle DBA管理包脚本系列(二)
该系列脚本结合日常工作,方便DBA做数据管理.迁移.同步等功能,以下为该系列的脚本,按照功能划分不同的包.功能有如下: 1)数据库对象管理(添加.修改.删除.禁用/启用.编译.去重复.闪回.文件读写. ...
- SQL强化(二) 在Oracle 中写代码
一 : 关于查询中的转换 -- 字符串转换 一 : decode 函数 转换 SELECT DECODE ( PROTYPE.PRO_TYPE_DATE, 'L', '长', 'm', '短', ' ...
- 160322、Maven手动安装Oracle的jar包
oracle的jar包 收费所以不能通过配置pom.xml获得,可以通过以下方法在pom.xml中引用 在命令行窗口执行(注意更改路径): mvn install:install-file -Dgro ...
- 使用Oracle的DBMS_SQL包执行动态SQL语句
引用自:http://blog.csdn.net/ggjjzhzz/archive/2005/10/17/507880.aspx 在某些场合下,存储过程或触发器里的SQL语句需要动态生成.Oracle ...
- oracle中utl_file包读写文件操作实例学习
在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create ...
随机推荐
- Go语言并发编程示例 分享(含有源代码)
GO语言并发示例分享: ppt http://files.cnblogs.com/files/yuhan-TB/GO%E8%AF%AD%E8%A8%80.pptx 代码, 实际就是<<Go ...
- 新建jfinal2.2项目并连接mysql
一新建项目 1. new→Dynamic Web Project 2修改Default Output Folder.一般用WebRoot\WEB-INF\class,然后下一步(注意路径要写对,不然 ...
- 学习Core 本机开发调试 (环境)
安装 https://www.microsoft.com/net/download 本机开发调试 需要下载安装这3个,如果没装 windows(Server Hosting)可能会 出现502.5报 ...
- ThinkPHP_基础(1)目录结构
(说明:文中的颜色一一对应) 目录结构 www WEB部署目录(或者子目录) ├─index.php 入口文件 ├─README.md README文件 ├─composer.json Compose ...
- 【已解决】关于SQL2008 “不允许保存更改。您所做的更改要求删除并重新创建以下表。您对无法重新创建的标进行了更改或者启用了‘阻止保存要求重新创建表的更改’” 解决方案
近日在使用SQL Server 2008的过程中,修改已创建完成的表结构时,却一直提示弹出如下提示: 不允许保存更改.您所做的更改要求删除并重新创建以下表.您对无法重新创建的标进行了更改或者启用了“阻 ...
- WPF(WP7、WP8)实现圆形图片
在WP平台上制作图片圆角其实特别简单, 用Image控件的Clip属性即可(RadiusX-Y设置为图片尺寸的一半) <Image Source="{Binding photo}&qu ...
- nopi excel 导入
#region 从Excel导入 /// <summary> /// 读取excel ,默认第一行为标头 /// </summary> /// <param name=& ...
- ORA-00942:table or view does not exist
好好的表都建成功了,在PL/SQL中编辑数据时给我来这个提示,起的我没办法了.查到如下: oracle建表时有一个严重的问题,在此写出来,提醒大家注意: 先简单写一下错误内容,如各位已经发现过此问题并 ...
- 基于redis排行榜的实战总结
前言: 之前写过排行榜的设计和实现, 不同需求其背后的架构和设计模型也不一样. 平台差异, 有的立足于游戏平台, 为多个应用提供服务, 有的仅限于单个游戏.排名范围差异, 有的面向全局排名, 有的只做 ...
- SqlServer 行转列(统计某年一到十二个月数据总和)
select * from( select sum(case MONTH(purchase_date) when '1' then SumMoney else 0 end) as January ...