12
返回列表 发新帖
楼主: joinsearch

急!困惑!如何求得一个存储过程执行情况,比如cpu利用率.

[复制链接]
论坛徽章:
0
11#
 楼主| 发表于 2008-1-2 16:03 | 只看该作者
谢谢Yong Huang。在我的存储过程里基本上除了select语句以外,就是一些判断语句,即根据输入参数的不同执行不同情况下的select语句。使用case。
CREATE OR REPLACE PROCEDURE SP_SELECT (Login_Name varchar2,
                                               Table_No   int,
                                               Condition  varchar2,
                                               SelectNo   int,
                                               ErrNo      out int,
                                               p_cursor   OUT SYS_REFCURSOR) AS
  --输出select语句的结果集

  aLogin_Name  varchar2(20);
  Mycondition  varchar2(300); --根据不同查询的内部查询条件
  RoleID       int; --判断身份 管理员1  操作员2  用户3  
  aW_ZDWDM     varchar2(20); --操作员的单位代码
  aK_LXDWDM    varchar2(20); --客户业务联系单位代码(操作员)
  aW_ZCID      varchar2(6); --注册用户的注册号
  QYID         varchar2(20); --企业id号,根据企业id决定看自己的企业信息(注册用户)
  aW_ZXG       varchar2(2); --0 无权查看 1 有权查看 2 有权修改(注册用户)(修改是在sp_update1中限制)
  InerSelectNo int;
  aW_UID       numeric(6); --是否为注册用户,并判断为何种用户(注册用户)
  --30  最终用户   只能查看自己的客户信息                      InerSelectNo=20
  --31  煤矿用户   只能看自己的客户信息和煤矿信息              InerSelectNo=21
  --32  运输用户   只能看自己的客户信息和运输信息              InerSelectNo=22
  --33  中间商       只能查看自己的客户信息                    InerSelectNo=20
  --34  洗精煤厂   只能看自己的客户信息和 洗精煤厂信息         InerSelectNo=23
  --35  储配煤厂   只能看自己的客户信息和储配煤厂信息          InerSelectNo=24
  GFKHID varchar2(20); --用于存放select语句字符串
  sqlstr varchar2(5000);
begin
  aLogin_Name := trim(Login_Name);
  SP_GETUSERGROUPID(aLogin_Name, RoleID, aW_UID, ErrNo);
  if (RoleID = -1) --无权查看
   then
    ErrNo := -1;
    return;
  end if;
  --管理员
  if (RoleID = 10 or RoleID = 12 or RoleID = 6 or RoleID = 7 or RoleID = 8 or
     RoleID = 9 or RoleID = 11 or RoleID = 13) then
    begin
      aW_ZDWDM := '';
      select W_ZDWDM
        into aW_ZDWDM
        FROM WT_CZYYH
       WHERE UPPER(W_CDLM) = UPPER(aLogin_Name);
      aW_ZDWDM := aW_ZDWDM || '%''';
    exception
      when no_data_found then
        ErrNo := -2;
        return;
    end;
  end if;
  --注册用户业务关系查询
  if (RoleID = 3) then
    begin
      select W_ZCID, W_ZQYID, W_ZXG
        into aW_ZCID, QYID, aW_ZXG --获得注册ID,--获得企业编码,--获得修改权限
        FROM WT_ZCYH
       WHERE UPPER(W_DLM) = UPPER(aLogin_Name);
       QYID:=QYID||'''';
    exception
      when no_data_found then
        ErrNo := -2;
        return;
    end;
  
    if (aW_ZXG = '0' or aW_zxg is null) then
      --无权查看
      ErrNo := -1;
      return;
    end if;
  
    case aW_UID
      when 30 then
        InerSelectNo := 20;
      when 33 then
        InerSelectNo := 20;
      when 31 then
        InerSelectNo := 21;
      when 32 then
        InerSelectNo := 22;
      when 34 then
        InerSelectNo := 23;
      when 35 then
        InerSelectNo := 24;
      else
        begin
          ErrNo := -1;
          return;
        end;
    end case;
  if(InerSelectNo=20)then
    begin
      select K_LXDWDM, K_KHBM
        into aK_LXDWDM, GFKHID --获得联系单位 --获得客户编码
        from KT_KHXX
       where K_ZCID = aW_ZCID;
    exception
      when no_data_found then
        ErrNo := -2;
        return;
    end;
    end if;
  end if;

  --根据所得业务关系,判断是否有查询权限,根据所给表号,进行操作     
  case Table_No
  when 0 then
    if (SelectNo = 0) then
      Mycondition := '';
      aW_ZDWDM    := '';
      aK_LXDWDM   := '';
      aW_ZCID     := '';
    elsif SelectNo = 1 then
      if (RoleID = 1 or RoleID = 5) then
        Mycondition := '';
        aW_ZDWDM    := '';
        aK_LXDWDM   := '';
        aW_ZCID     := '';
      elsif (RoleID = 10 or RoleID = 12 or RoleID = 6 or RoleID = 7 or
            RoleID = 8 or RoleID = 9 or RoleID = 11 or RoleID = 13) then
        aW_ZCID     := '';
        aK_LXDWDM   := '';
        Mycondition := 'and  K_LXDWDM like ''';
      elsif (InerSelectNo = 20 and RoleID = 3) then
        aK_LXDWDM   := '';
        aW_ZDWDM    := '';
        Mycondition := 'and  K_ZCID= ';
      else
        ErrNo := -1;
        return;
      end if;
    end if;
    sqlstr := 'select
      K_KHID AS "客户序号",
      K_ZCID AS "注册号",
      K_DSXMC as "所在地区",
      K_KHBM AS "客户编码",
      K_QYMC AS "企业名称",
      K_QYJC AS "企业简称",
      K_FDDBR AS "法人",
      K_ZCZJ AS "注册金",
      K_ZS AS "住所",
      a.W_XCSXSZF AS "企业类型",
      K_JYFW AS "经营范围",
      K_MTZGZH AS "煤资格证号",
      K_MTJYFS AS "经营方式",
      K_ZZJGDM AS "机构代码",
      K_ZZJGLX AS "机构类型",
      c.W_XCSXSZF AS "行业流向",
      K_NXQZL AS "煤碳年需求量",
      K_LXR AS "联系人",
      K_GDDH AS "固话",
      K_SJ AS "手机",
      K_DBGH AS "电报挂号",
      K_CZ AS "传真",
      K_DZYX AS "电邮",
      K_KWZ AS "网址",
      K_YZBM AS "邮政编码",
      f.W_ZDWMC AS "联系单位"
      from  KT_KHXX ,WT_XTCYXXSM a,WT_XTCYXXSM c,WT_ZZJG f
      where  a.W_XCSZ=K_QYLXDM and a.W_XCSLX=''企业类型'' and  
      c.W_XCSZ= K_HYLXDM and c.W_XCSLX=''行业流向'' and
      f.W_ZDWDM=K_LXDWDM
      ' || Mycondition || aK_LXDWDM || aW_ZDWDM || aW_ZCID ||Condition;
    open p_cursor FOR sqlstr;
    ErrNo := 0;
.......以下是在其他表上面的查询.......与这一段类似。

使用道具 举报

回复
招聘 : 数据库管理员
论坛徽章:
25
生肖徽章2007版:龙
日期:2008-05-06 11:07:48咸鸭蛋
日期:2011-10-19 10:09:12ITPUB十周年纪念徽章
日期:2011-11-01 16:20:282012新春纪念徽章
日期:2012-01-04 11:49:542013年新春福章
日期:2013-02-25 14:51:24
12#
发表于 2008-1-2 20:29 | 只看该作者
我觉得应该是通过你的存储过程里面的直接语句来找。

使用道具 举报

回复
论坛徽章:
0
13#
 楼主| 发表于 2008-1-3 10:43 | 只看该作者
To foxmile:
你的意思是应该逐条查看我存储过程里面的语句的执行情况吗?我是想看整个存储过程对系统资源的消耗情况,以便于对存储过程控制。因为我可能控制不了存储过程里面的语句的执行情况。
还有一个问题就是----不同的输入参数对存储过程的影响是不一样的,如何编写自动化的测试程序来测试存储过程在不同的输入参数下执行的情况呢?

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表