plsql@

 

--创建包声明

create or replace package testPiple

 is

   procedure hire_emp(p_empno number, p_name varchar2);

end;

--创建包体

create or replace package body testPiple

is

    procedure hire_emp(p_empno number, p_name varchar2)

      is

 

      begin

        select * from dule;

      end;

end;      

 

--创建存储过程

create or replace procedure P1

is

  v_cnt number;

begin

  select count(*) into v_cnt from test;

  --调用存储过程

  p2;

end;  

 

--创建函数

create or replace function consumer return sys_refcursor

is

    src_rows sys_refcursor;

begin

  null;

end;      

 

--创建object类型

create or replace type emprec is object

( empno number(10),

  ename varchar2(20),

  hiredate date

  sal number(10,2));

  --隐式赋值

  emp emprec := emprec(1,'lwl','9783');

 

--创建数组类型

type emp_list is table of emp%rowtype;

create or replace type emplist as table of emprec;

 

--管道函数

function manipulator(src_rows sys_refcursor) return emplist pipelined

  is

    r emprec;

    e emp%rowtype;

  begin

    loop

      --fetch src_rows bulk collect into elist limit 100;

      fetch src_rows into e;

      exit when src_rows%notfound;

      pipe row (emprec(1,'lwl','9783'));

    end loop;

    close src_rows;

    return;

end;    

--管道化表函数

insert into  emp2 select * from table(cast(manipulator(rc) as emplist));

 

 

--两个动态类型属性

%type, %rowtype

  --表字段类型引用

  v_salary emp.sal%type;  

  --变量类型引用,引用包my_pkg的变量glob_var的类型

  var1 my_pkg.glob_var%type;

 

  --表类型引用

  emprc emp%rowtype;

  select * into emprc from emp where rownum = 1;

  insert into emp values emprc;

  update emp set row = emprc where rownum = 1;

 

 

 

 

--查询对象的依赖关系

select name,type,referenced_name,referenced_type

       from user_dependencies

       where name = 'TESTPIPLE';

 

--查询对象的状态

select object_name, status

       from user_objects

       where object_name in ('P1','P2','P3','P4');   

 

--创建一个查看当前会话的性能统计视图,方便查看   重要

create or replace view V$MYSTATS

as 

select s.name, m.value

       from v$mystat m, v$statname s

       where s.STATISTIC# = m.STATISTIC# and name like '%memory%';

grant select on v$mystats to public;    

 

select * from v$mystats where name like '%session%';   

 

AUTOTRACE是一项 SQL*Plus 功能,自动跟踪为 SQL 语句生成一个执行计划并且提供与该语句的处理有关的统计。

SQL*Plus AUTOTRACE 可以用来替代 SQL Trace 使用,AUTOTRACE 的好处是您不必设置跟踪文件的格式,并且它将自动为 SQL 语句显示执行计划。然而,AUTOTRACE 分析和执行语句;而EXPLAIN PLAN仅分析语句。

使用AUTOTRACE不会产生跟踪文件。


一、启用Autotrace功能。
任何以SQL*PLUS连接的session都可以用Autotrace,不过还是要做一些设置的,否则可能报错。

1、报错示例:
SQL :> set autotrace on;
SP2-0613: Unable to verify PLAN_TABLE format or existence
SP2-0611: Error enabling EXPLAIN report
SP2-0618: Cannot find the Session Identifier. Check PLUSTRACE role is enabled
SP2-0611: Error enabling STATISTICS report

*******************************************************************************

SQL> set autotrace on;

SP2-0613: 无法验证 PLAN_TABLE 格式或实体

SP2-0611: 启用EXPLAIN报告时出现错误

SP2-0618: 无法找到会话标识符。启用检查 PLUSTRACE 角色

SP2-0611: 启用STATISTICS报告时出现错误

 

该错误的的主要原因是由于当前用户下没有PLAN_TABLE这张表及相应的PLUSTRACE角色权限。

 

2、解决方法:

A.以SYS用户登录:

oracle>sqlplus ‘/ as sysdba‘;

B.运行utlxplan.sql(rdbms/admin脚本创建 PLAN_TABLE

SQL>@ D:oracleora81RDBMSADMINutlxplan.sql

C.通过执行 plustrce.sql(ORACLE_HOME/sqlplus/admin/plustrce.sql)脚本创建 plustrace 角色,这将V$ 视图上的选择权限授予该角色,也将 plustrace 角色授予 DBA  色,脚本部份内容如下:

drop role plustrace;
create role plustrace;
grant select on v_$sesstat to plustrace;
grant select on v_$statname to plustrace;
grant select on v_$session to plustrace;
grant plustrace to dba with admin option;
D.将 plustrace 角色授予当前用户( DBA 角色的用户)

 

二、设置Autotrace的命令。

 

 

序号

命令

解释

1

SET AUTOTRACE OFF

此为默认值,即关闭Autotrace

2

SET AUTOTRACE ON

产生结果集和解释计划并列出统计

3

SET AUTOTRACE ON EXPLAIN

显示结果集和解释计划不显示统计

4

SETAUTOTRACE TRACEONLY

显示解释计划和统计,尽管执行该语句但您将看不到结果集

5

SET AUTOTRACE

TRACEONLY STATISTICS

只显示统计

EgSET AUTOTRACE ON, set timing on, alter session set time_statistics=true;

 

三、Autotrace执行计划的各列的涵义

 

序号

列名

解释

1

ID_PLUS_EXP

每一步骤的行号

2

PARENT_ID_PLUS_EXP

每一步的Parent的级别号

3

PLAN_PLUS_EXP

实际的每步

4

OBJECT_NODE_PLUS_EXP

Dblink或并行查询时才会用到

 

四、AUTOTRACE Statistics常用列解释

 

序号

列名

解释

1

db block gets

buffer cache中读取的block的数量

2

consistent gets

buffer cache中读取的undo数据的block的数量

3

physical reads

从磁盘读取的block的数量

4

redo size

DML生成的redo的大小

5

sorts (memory)

在内存执行的排序量

7

sorts (disk)

在磁盘上执行的排序量

 


 

sql_trace和tkprof

alter session set sql_trace=true;

alter session set sql_trace=false;

 

//

create or replace procedure createseesync
is

       i              number;
       cidbase        number;
       SID           number;
       EFFECTIVETIME VARCHAR(20);
       EXPIRYTIME    VARCHAR(20);
       NOTIFYADDRESS VARCHAR(1024);
       PRODUCTID     VARCHAR(30);
       RENTSUCCESS   VARCHAR(1);
       SERVICEID     VARCHAR(70);
       SERVICELIST   VARCHAR(1024);
       SPID          VARCHAR(30);
       SYNCDEVCODE   VARCHAR(10);
       TRY           VARCHAR(1);
       UPDATEDESC    VARCHAR(300);
       UPDATETIME    VARCHAR(20);
       UPDATETYPE    VARCHAR(10);
       USERID        VARCHAR(50);
       USERTYPE      VARCHAR(10);
       servid        VARCHAR(70);
       uid           VARCHAR(70);

       type t_synship_tabletype is table of syncorderrelationship%rowtype
                                            index by binary_integer;
       shiptable t_synship_tabletype;


begin

    SID := 1;
    EFFECTIVETIME := '20100101121212';
    EXPIRYTIME := '20131020112233';
    NOTIFYADDRESS := '';
    PRODUCTID := 'p001';
    RENTSUCCESS := '0';
    SERVICEID := '2001';
    SPID := '200';
    SYNCDEVCODE := '555';
    TRY := '0';
    UPDATEDESC := '1';
    UPDATETIME := '20100818000000';
    UPDATETYPE := '1';
    USERID := '15000000000';
   
    cidbase := 0;

  --  for i in 1..3000000
  --    loop
   --     SID := SID+1;
   --     USERID := USERID+1;
 --     end loop;

    for cidbase in 1..3000 loop
        i := 0;
        -- SERVICEID := SERVICEID+1;
        for i in 1..1000 loop
            servid := TO_CHAR(SERVICEID);
            uid := TO_CHAR(USERID);

            shiptable(i).sid:=sid;
            shiptable(i).EFFECTIVETIME:=EFFECTIVETIME;
            shiptable(i).EXPIRYTIME:=EXPIRYTIME;
            shiptable(i).NOTIFYADDRESS:=NOTIFYADDRESS;
            shiptable(i).PRODUCTID:=PRODUCTID;
            shiptable(i).RENTSUCCESS:=RENTSUCCESS;
            shiptable(i).SERVICEID:=servid;
            shiptable(i).SERVICELIST:=SERVICELIST;
            shiptable(i).SPID:=SPID;
            shiptable(i).SYNCDEVCODE:=SYNCDEVCODE;
            shiptable(i).TRY:=TRY;
            shiptable(i).UPDATEDESC:=UPDATEDESC;
            shiptable(i).UPDATETIME:=UPDATETIME;
            shiptable(i).UPDATETYPE:=UPDATETYPE;
            shiptable(i).USERID:=uid;
            shiptable(i).USERTYPE:=USERTYPE;
           -- eiid := TO_CHAR(EIID);
            SID := SID+1;
            USERID := USERID+1;
        end loop;
        forall i in 1..shiptable.count
             insert into syncorderrelationship(SID,EFFECTIVETIME,EXPIRYTIME,NOTIFYADDRESS,PRODUCTID,RENTSUCCESS,SERVICEID,SERVICELIST,SPID,SYNCDEVCODE,TRY,UPDATEDESC,UPDATETIME,UPDATETYPE,USERID,USERTYPE)
                values(shiptable(i).SID,shiptable(i).EFFECTIVETIME,shiptable(i).EXPIRYTIME,shiptable(i).NOTIFYADDRESS,shiptable(i).PRODUCTID,shiptable(i).RENTSUCCESS,shiptable(i).SERVICEID,shiptable(i).SERVICELIST,shiptable(i).SPID,shiptable(i).SYNCDEVCODE,shiptable(i).TRY,shiptable(i).UPDATEDESC,shiptable(i).UPDATETIME,shiptable(i).UPDATETYPE,shiptable(i).USERID,shiptable(i).USERTYPE);
       
        forall i in 1..shiptable.count
             insert into extensioninfo(EIID,SID,key,value)values(shiptable(i).SID,shiptable(i).SID,'locationCode','11');
        commit;
      end loop;
    commit;
    return;
exception
    when others then
        rollback;
        return;
end createseesync;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值