壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

123
返回列表 发新帖
楼主: ttx2000

关于SQL*PLUS写报表

[复制链接]
发表于 2008/6/5 08:52:21 | 显示全部楼层
我用PL/SQL源码测试,在测package时就会提示:
Compilation errors for PACKAGE BODY APPS.CUX_OTHER01_REPORT
Error: Hint: Parameter 'errbuf' is declared but never used in 'do'
Line: 36
Text: procedure do(errbuf OUT VARCHAR2, retcode OUT NUMBER) is
Error: Hint: Parameter 'retcode' is declared but never used in 'do'
Line: 36
Text: procedure do(errbuf OUT VARCHAR2, retcode OUT NUMBER) is

这里应该如何处理.谢谢.

[ 本帖最后由 bike_lu 于 2007-4-16 11:25 编辑 ]
----------------------------------------------------------------------------------------------------------------------------------
这个应该只是一个警告,对程式运行没有影响,这两个参数是系统要求必须的,应该是要做错误信息缓冲的。
发表于 2008/6/6 10:20:46 | 显示全部楼层
errbuf 用来返回错误的信息,应该可以在LOG里显示
retcode 返回值为0是成功,1是警告,2是错误
发表于 2008/6/6 16:45:57 | 显示全部楼层

为什么我什么都下载不了呢

为什么我什么都下载不了呢
发表于 2008/6/12 22:09:58 | 显示全部楼层
老大SQL*PLUS 是一个编辑器,可以运行 pl/sql语言和sql语言 :/xia
发表于 2008/6/18 14:52:11 | 显示全部楼层
不错,先研究一下。
发表于 2008/6/18 15:18:16 | 显示全部楼层
不错哦
发表于 2008/6/21 11:42:23 | 显示全部楼层
给你个例子:是PL/SQL与SQL*Plus的结合,前端是PL/SQL,后面是sql*plus
SET term   Off;
SET feedb  Off;
SET echo   Off;
SET verify Off;
Set linesize 800 ;
set serveroutput on size 1000000;
SET ARRAYSIZE 1;
DECLARE
  /******************************************************************************
     NAME:       MBOMFCAD
     PURPOSE:    obtain a file of SSCAD;first you obtafined temp file from oracle erp bom,
                 you combines it with package file,CAD to produce SSCAD file.
     REVISIONS:
     Ver        Date        Author           Description
     ---------  ----------  ---------------  ------------------------------------
     1.0        2007/12/25  Jansy.sun        1. Created this program.
  
     NOTES:
  ******************************************************************************/
  v_organization_id NUMBER;
  v_part_number     VARCHAR2(12);
  v_count1          NUMBER;
  v_count2          NUMBER;
  v_level           NUMBER;
  v_package         VARCHAR2(20);
  c_number  CONSTANT NUMBER := 0;
  c_number2 CONSTANT NUMBER := 1;
  v_user_id     NUMBER;
  v_total_count NUMBER;
  v_smtcnt      NUMBER;

  CURSOR cur_package IS
  
    SELECT organization_id,
           compile_designator,
           parent_part_number,
           comp_part_number,
           comp_desc,
           component_quantity,
           component_reference_designator
    FROM   mkl_bom_compare_cross_pnloc
    WHERE  organization_id = v_organization_id
    AND    parent_part_number = v_part_number;

  CURSOR cus_double_loc IS
    SELECT DISTINCT mbst.component_reference_designator,
                    mbst.comp_part_number
    FROM   mkl_bom_compare_sscad_temp mbst
    WHERE  mbst.organization_id = v_organization_id
    AND    mbst.parent_part_number = v_part_number
    AND    mbst.component_reference_designator IS NOT NULL;

BEGIN
  v_organization_id := to_number('&&1');
  v_part_number     := '&&2';
  v_user_id         := fnd_global.user_id;

  DELETE FROM mkl_bom_compare_cross_pnpkgs
  WHERE  organization_id = v_organization_id
  AND    parent_part_number = v_part_number;

  DELETE FROM mkl_bom_compare_sscad_temp
  WHERE  organization_id = v_organization_id
  AND    parent_part_number = v_part_number;

  DELETE FROM mkl_bom_compare_sscad mbst
  WHERE  mbst.organization_id = v_organization_id
  AND    mbst.parent_part_number = v_part_number;
  dbms_output.put_line('SMT料號為:' || v_part_number);
  FOR c_pkg IN cur_package LOOP
    v_package := mkl_bom_compare_pn_package_f(c_pkg.organization_id,
                                              c_pkg.comp_part_number);
  
    INSERT INTO mkl_bom_compare_cross_pnpkgs
      (organization_id,
       parent_part_number,
       comp_part_number,
       comp_desc,
       component_quantity,
       component_reference_designator,
       pn_package,
       created_by,
       creation_date,
       last_updated_by,
       last_update_date,
       last_update_login)
    VALUES
      (c_pkg.organization_id,
       c_pkg.parent_part_number,
       c_pkg.comp_part_number,
       c_pkg.comp_desc,
       c_pkg.component_quantity,
       c_pkg.component_reference_designator,
       v_package,
       v_user_id,
       SYSDATE,
       v_user_id,
       SYSDATE,
       v_user_id);
  END LOOP;

  INSERT INTO mkl_bom_compare_sscad_temp
    (organization_id,
     parent_part_number,
     revision,
     component_reference_designator,
     device_value,
     comp_pn_package,
     x_loc,
     y_loc,
     ang,
     comp_part_number,
     creation_date,
     created_by,
     last_update_date,
     last_updated_by,
     last_update_login,
     component_quantity,
     attribute1)
    SELECT mpkg.organization_id,
           mpkg.parent_part_number,
           NULL,
           mpkg.component_reference_designator,
           mcad.device_value,
           mpkg.pn_package,
           mcad.x_loc,
           mcad.y_loc,
           mcad.ang,
           mpkg.comp_part_number,
           SYSDATE,
           v_user_id,
           SYSDATE,
           v_user_id,
           v_user_id,
           mpkg.component_quantity,
           mcad.face_flag
    FROM   mkl_bom_compare_cross_pnpkgs mpkg, mkl_bom_compare_cad_v mcad
    WHERE  mpkg.organization_id = mcad.organization_id
    AND    mpkg.parent_part_number = mcad.parent_part_number
    AND    mpkg.component_reference_designator =
           mcad.component_reference_designator
    AND    mpkg.organization_id = v_organization_id
    AND    mpkg.parent_part_number = v_part_number;

  FOR c2 IN cus_double_loc LOOP
  
    SELECT COUNT(*)
    INTO   v_count2
    FROM   mkl_bom_compare_sscad_temp mbst
    WHERE  mbst.organization_id = v_organization_id
    AND    mbst.parent_part_number = v_part_number
    AND    mbst.component_reference_designator =
           c2.component_reference_designator;
  
    IF v_count2 > c_number2 THEN
   
      DELETE FROM mkl_bom_compare_sscad_temp mbst
      WHERE  mbst.organization_id = v_organization_id
      AND    mbst.parent_part_number = v_part_number
      AND    mbst.component_reference_designator =
             c2.component_reference_designator
      AND    rownum <= v_count2 - 1;
   
      UPDATE mkl_bom_compare_sscad_temp mbst
      SET    mbst.comp_part_number = NULL,
             mbst.comp_pn_package  = NULL
      WHERE  mbst.organization_id = v_organization_id
      AND    mbst.parent_part_number = v_part_number
      AND    mbst.component_reference_designator =
             c2.component_reference_designator;
    END IF;
  
  END LOOP;

  INSERT INTO mkl_bom_compare_sscad
    (organization_id,
     parent_part_number,
     revision,
     component_reference_designator,
     device_value,
     comp_pn_package,
     x_loc,
     y_loc,
     ang,
     comp_part_number,
     creation_date,
     created_by,
     last_update_date,
     last_updated_by,
     last_update_login,
     attribute1)
    SELECT mbst.organization_id,
           mbst.parent_part_number,
           mbst.revision,
           mbst.component_reference_designator,
           mbst.device_value,
           mbst.comp_pn_package,
           mbst.x_loc,
           mbst.y_loc,
           mbst.ang,
           mbst.comp_part_number,
           SYSDATE,
           v_user_id,
           SYSDATE,
           v_user_id,
           v_user_id,
           mbst.attribute1
    FROM   mkl_bom_compare_sscad_temp mbst
    WHERE  mbst.organization_id = v_organization_id
    AND    mbst.parent_part_number = v_part_number;
    SELECT COUNT(*)
    INTO   v_total_count
    FROM   mkl_bom_compare_sscad mbst
    WHERE  mbst.organization_id = v_organization_id
    AND    mbst.parent_part_number = v_part_number;
   
    SELECT COUNT(DISTINCT mbst.comp_part_number)
    INTO   v_smtcnt
    FROM   mkl_bom_compare_sscad mbst
    WHERE  mbst.organization_id = v_organization_id
    AND    mbst.parent_part_number = v_part_number
    AND    mbst.comp_part_number IS NOT NULL;
   
    dbms_output.put_line('SMT元件個數:'||v_total_count);
    dbms_output.put_line('料號種類數:'||v_smtcnt);
  COMMIT;
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line('MBOM CHECK RESULT PROGRAM: ' || to_char(SQLCODE) ||
                         SQLERRM);
    ROLLBACK;
  
END;
/

SET HEADING ON
SET ARRAYSIZE 1
SET ECHO OFF
SET FEED OFF
SET SPA 1
SET LINESIZE 700
SET PAGESIZE 2000
SET FEEDBACK OFF
SET VERIFY OFF
SET UNDERLINE ON

TTITLE 'Download SSCAD File Report '  SKIP 2-

COLUMN Information          FORMAT A1000 head Information

SELECT component_reference_designator||chr(9)||' '||x_loc||chr(9)||' '||y_loc||chr(9)||' '||ang||chr(9)||' '||comp_part_number||chr(9)||' '||comp_pn_package information
FROM   mkl_bom_compare_sscad
WHERE  organization_id = '&&1'
AND    parent_part_number = '&&2'
AND    attribute1 = decode('&&3', 'Y', 1, 'N', '&&4');
发表于 2008/6/23 01:05:23 | 显示全部楼层

就是这样,可以用SQL和HTML结合的办法
不过很多时候格试不好调
发表于 2008/6/26 11:15:05 | 显示全部楼层
给大家一个最标准的SQL*PLUS格式的报表,全部是用select语句结合html语言写出来的,最后把下面的代码保存成后缀为sql格式的文件就可以了,注意:文件的编码存为“UTF-8”,要不然会SQL*PLUS报表会报错,然后在ERP系统中的“并发”,“可执行”中定义上就是一张SQL*PLUS报表。
def P_ORG_ID = '&1'
def P_SHIP_ID = '&2'
def P_VENDOR_ID = '&3'
def P_ITEM_FROM = '&4'
def P_ITEM_TO = '&5'
def P_CATEGORY_ID = '&6'
def P_DATE_FROM = '&7'
def P_DATE_TO = '&8'

Select '<table border="0" width="100%">',       
'<tr><td colspan="4"><h1 align="center"><b>采购比例查询汇总表</b></h1></td></tr>',
'<tr><td width="20%">开始时间:'||to_char(to_date('&P_DATE_FROM','YYYY/MM/DD HH24:MI:SS'),'YYYY-MM-DD')||'</td><td width="20%">结束时间:'||to_char(to_date('&P_DATE_TO','YYYY/MM/DD HH24:MI:SS'),'YYYY-MM-DD')||'</td><td width="50%"></td><td width="10%"></td></tr>',
'</table>'
from DUAL;

SELECT '<table border="2" cellpadding="1"  style="border-collapse: collapse" bordercolorlight="#000000" bordercolordark="#000000">'
FROM dual;


Select '<tr>',
                        '<th nowrap bgcolor="#FFFFFF">','工厂','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','供应商名称','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','物料编码','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','物料名称','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','物料类别','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','计量单位','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','采购总数量','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','从该供应商的采购数量','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','供应商数量占总数量的比例(%)','</th>',
                        '<th nowrap bgcolor="#FFFFFF">','原因说明','<th>',
'</tr>'
FROM dual;

Select '<tr>',     
      '<td nowrap style=''mso-number-format:"\@"''>',hou.name,'</td>',--工厂
      '<td nowrap style=''mso-number-format:"\@"''>',pv.vendor_name,'</td>', --供应商名称
      '<td nowrap style=''mso-number-format:"\@"''>',msi.SEGMENT1,'</td>', --物料编码
      '<td nowrap style=''mso-number-format:"\@"''>',msi.DESCRIPTION,'</td>', --物料名称
      '<td nowrap style=''mso-number-format:"\@"''>',mct.description,'</td>',            --物料类别  
      '<td nowrap style=''mso-number-format:"\@"''>',a.unit_meas_lookup_code,'</td>', --计量单位      
      '<td nowrap>',sum(quantity_received) over (partition by a.item_id,a.unit_meas_lookup_code ),'</td>',--采购总数量
      '<td nowrap>',quantity_received,'</td>',         --从该供应商的采购数量
      '<td nowrap>',round(quantity_received*100/ sum(quantity_received) over (partition by a.item_id,a.unit_meas_lookup_code ),5),'</td>', --供应商数量占总数量的比例
      '<td nowrap style=''mso-number-format:"\@"''>','','</td>', --合同截止日
      '</tr>'
from
(select ph.org_id,pl.item_id,ph.vendor_id,pl.unit_meas_lookup_code, sum(pll.quantity_received) quantity_received,pll.SHIP_TO_ORGANIZATION_ID
from po_headers_all ph ,po_lines_all pl,po_line_locations_all pll
where
ph.org_id=decode('&P_ORG_ID','-999999',ph.org_id,'&P_ORG_ID')
and pll.SHIP_TO_ORGANIZATION_ID=decode('&P_SHIP_ID','',pll.SHIP_TO_ORGANIZATION_ID,'&P_SHIP_ID')
and ph.vendor_id is  not null
and ph.po_header_id=pl.po_header_id
and pll.po_header_id=pl.po_header_id
and pll.po_line_id=pl.po_line_id
and pll.quantity_received<>0
and ph.vendor_id=decode('&P_VENDOR_ID','',ph.vendor_id,'&P_VENDOR_ID')
and pll.last_update_date between decode('&P_DATE_FROM','',pll.last_update_date ,to_date('&P_DATE_FROM','YYYY/MM/DD HH24:MI:SS')) and decode('&P_DATE_TO','',pll.last_update_date ,to_date('&P_DATE_TO','YYYY/MM/DD HH24:MI:SS'))+1-1/(3600*24)
group by ph.org_id,pl.item_id,ph.vendor_id,pl.unit_meas_lookup_code,pll.SHIP_TO_ORGANIZATION_ID) a,
po_vendors pv,mtl_system_items_vl msi,hr_organization_units hou ,MTL_ITEM_CATEGORIES_V mic,MTL_CATEGORIES_TL mct
where a.vendor_id=pv.vendor_id
and a.item_id=msi.INVENTORY_ITEM_ID
and msi.ORGANIZATION_ID=(select organization_id from mtl_parameters where organization_code='MST')
and a.org_id=hou.organization_id
and mic.ORGANIZATION_ID=msi.ORGANIZATION_ID
   and  mic.CATEGORY_SET_NAME='YILI_物品类别集'
   and mic.INVENTORY_ITEM_ID=msi.INVENTORY_ITEM_ID   
   and msi.SEGMENT1 between decode('&P_ITEM_FROM','',msi.SEGMENT1,'&P_ITEM_FROM')  and decode('&P_ITEM_TO','',msi.SEGMENT1,'&P_ITEM_TO')
  and mct.category_id=mic.CATEGORY_ID
and mct.language = userenv('LANG')
and mic.CATEGORY_ID=decode('&P_CATEGORY_ID','',mic.CATEGORY_ID,'&P_CATEGORY_ID');

SELECT '</table>' FROM dual;
发表于 2010/11/13 18:44:55 | 显示全部楼层
现在很少有人用sqlplus写报表了,11的时候用的,11i 以后很少用了。
发表于 2012/6/14 09:08:01 | 显示全部楼层
好帖子啊,学习到很多东西啊。。。
发表于 2012/6/15 10:38:41 | 显示全部楼层
haixing 发表于 2007/9/2 17:54
给你一个例子:

set linesize 400

你好,我用你的例子试了试,但是我Sql语句里面一有中文就会出错。要全英文才行,请问这里要怎么设置,才能有中文啊?
发表于 2012/6/15 11:01:18 | 显示全部楼层
都是开发高手啊,
佩服佩服!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 23:06 , Processed in 0.019144 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表