oracle笔记

1:导入数据库(直接cmd)
imp 姓名/密码@服务 file=文件路劲 full=y
例如:imp zhl/password@orcl file=d:\zhl.dmp full=y

2:创建 赋值权限 删除用户
CREATE USER 姓名 IDENTIFIED BY 密码
grant all on 数据库名 to 用户名
drop USER  姓名(删除用户)


3:修改 添加表 删除表字段 格式:
alter table 表名 add 新列列名 列数据类型   [default 0 not null]   (添加列默认值为0)
alter table 表名 drop 列名   (删除列)
alter table 表名 alter column 列名 新添加的数据类型  (修改列)

4:oracle删除序列化
DROP SEQUENCE 序列名字 

oracle创建序列化:
CREATE SEQUENCE seq_itv_collection
            INCREMENT BY 1  -- 每次加几个  
            START WITH 1399    -- 从1开始计数  
            NOMAXVALUE        -- 不设置最大值  
            NOCYCLE           -- 一直累加,不循环  
            CACHE 10; 

5:oracle修改序列化:Alter Sequence  
如果想要改变 start值,必须 drop  sequence 再  re-create .   
Alter sequence 的例子
ALTER SEQUENCE emp_sequence  
           INCREMENT BY 10  
           MAXVALUE 10000  
           CYCLE    -- 到10000后从头开始  
           NOCACHE ;  
实例:
create sequence AA_BASE_DS_PARAM_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;


有两种方式可以实现条件循环

一、for  变量  in  开始数值...结束数值 loop     end loop;

二、while 条件 loop       end  loop;

6:Oracle数据库中实现某一列的自动增加
在 oracle里有序列(sequence)我们要创建一个序列才能完成自动增加
create sequence AA_BASE_DS_PARAM_SEQ
minvalue 1
maxvalue 999999999999999999999999999
start with 1
increment by 1
cache 20;

这样就创建了一个序列 向数据库中插入数据时SQL的格式如下
insert into auto_incre_test (id) values(序列名.nextval);
 
--------------------------------------------------
declare
  i number;
begin
  i := 0;
  loop
    i := i + 1;
    insert into XMS_EXAME_TEM (id) values (AA_BASE_DS_PARAM_SEQ.nextval);
    if i > 5 then
      exit;
    end if;
  end loop;

end;

-------------------------------
declare
  i number;
begin
  i := 0;
  for i in 1 .. 99999 loop
    insert into XMS_EXAME_TEM (id) values (seq_XMS_EXAME_TEM.nextval);
  end loop;

end;s
还有一种方法就是象Access和Sql Server 里自动增加的字段效果一样的 在insert 语句里
不用指明字段 自己就添加的方法  首先也要生成一个序列,此外还有给被插入的表添加一个触发器
让表中的某列值自动加一(用序列和触发器实现):   
   
  建立触发器:  
create or replace trigger ait_bir
  before insert on auto_incre_test
  for each row
begin
  select 序列名.nextval into :new.id from dual;
end; 
  在往表auto_incre_test插入记录时,只需插入除ID以外的列的值,ID值会自动递增


存储过程:

create or replace procedure SS_VEHICLE_PRODUCT_CONFIRM(v_id      in varchar2, --接车单ID
                                                       v_user_id in varchar2, --操作人员ID
                                                       v_result  out varchar2,
                                                       v_ok      out number) is
  /*
  存储过程说明:                                                                                         
  精品销售处理:
  */

  -------------------------------------------------------------------------------------------
  /*
  rowtype变量
  */
  t_aa_sec_user aa_sec_user%rowtype; --人员信息
  t_b_lot_cargo b_lot_cargo%rowtype; --库存信息
  t_ss_vehicle  ss_vehicle%rowtype; --接车单

  -------------------------------------------------------------------------------------------
  /*
  number变量
  */

  -------------------------------------------------------------------------------------------
  /*
  varchar2变量
  
  */
  -------------------------------------------------------------------------------------------
  /*
  cursor变量
  */
  --精品销售信息
  cursor c_ss_vehicle_product is
    select a1.id,
           a1.aa_headquarter_id,
           a1.aa_client_id,
           a1.aa_org_id,
           a1.create_by,
           a1.create_date,
           a1.update_by,
           a1.update_date,
           a1.isactive,
           a1.entitytype,
           a1.status,
           a1.b_lot_cargo_id,
           a1.cargo_name,
           a1.cargo_code,
           a1.b_warehouse_id,
           a1.cur_price,
           a1.qty_num,
           a1.cur_amount,
           a1.ss_vehicle_id,
           a1.aa_sec_user_id_sale,
           a1.cur_price_vip,
           a1.cur_price_novip,
           a1.sel_is_redu_able,
           a1.manual_receive_no,
           a1.b_lot_id,
           a1.b_cargo_id,
           a2.qty_num - nvl(a2.qty_lock, 0) qty_num_able
      from ss_vehicle_product a1, b_lot_cargo a2
     where a1.b_lot_cargo_id = a2.id
       and a1.ss_vehicle_id = t_ss_vehicle.id;

  --入库货物库位处理信息
  cursor c_ss_vehicle_product_store is
    select a1.b_cargo_id,
           a1.aa_org_id,
           a1.update_date,
           a1.qty_num,
           a1.aa_sec_user_id_sale,
           a1.b_warehouse_id
      from ss_vehicle_product a1, b_lot_cargo a2
     where a1.b_lot_cargo_id = a2.id
       and a1.ss_vehicle_id = t_ss_vehicle.id
     group by a1.b_cargo_id;
  -------------------------------------------------------------------------------------------
  /*
  公共变量
  */
  v_curr_date    date := sysdate;
  v_count        number;
  error1 exception;
begin

  --接车单信息
  select a.* into t_ss_vehicle from ss_vehicle a where a.id = v_id;

  --获取人员信息
  begin
    select *
      into t_aa_sec_user
      from aa_sec_user a
     where a.aa_user_id = v_user_id;
  exception
    when no_data_found then
      --不做处理
      null;
  end;

  --精品销售明细不能为空
  select count(*)
    into v_count
    from ss_vehicle_product a
   where a.ss_vehicle_id = t_ss_vehicle.id;
  if v_count = 0 then
    v_result := '提示: 精品销售明细不能为空!';
    raise error1;
  end if;

  --循环处理精品销售信息
  for v_ss_vehicle_product in c_ss_vehicle_product loop
    --判断精品销售数量信息
    if nvl(v_ss_vehicle_product.qty_num, 0) <= 0 then
      --返回错误信息
      v_result := '错误:产品 ' || v_ss_vehicle_product.cargo_name ||
                  ' 的精品销售货物必须大于0';
      raise error1;
    end if;
  
    --减少产品库存信息(即 b_lot_cargo 中qty_num减少)
    update b_lot_cargo a
       set a.qty_num = a.qty_num - v_ss_vehicle_product.qty_num
     where a.id = v_ss_vehicle_product.b_lot_cargo_id;
  
    --新增 产品库存跟踪记录(b_lot_cargo_track)的出库信息
    insert into b_lot_cargo_track
      (id,
       aa_headquarter_id,
       aa_client_id,
       aa_org_id,
       create_by,
       create_date,
       update_by,
       update_date,
       isactive,
       entitytype,
       status,
       b_lot_id,
       b_cargo_id,
       aa_sec_org_id,
       qty_num,
       sel_inout,
       work_date,
       aa_sec_user_id)
    values
      (b_lot_cargo_track_seq.nextval, --id
       t_aa_sec_user.aa_headquarter_id, --aa_headquarter_id,
       t_aa_sec_user.aa_client_id, --aa_client_id
       t_aa_sec_user.aa_org_id, --aa_org_id
       t_aa_sec_user.aa_user_id, --create_by
       v_curr_date, --create_date,
       t_aa_sec_user.aa_user_id, --update_by,
       v_curr_date, --update_date,
       'Y', --isactive,
       'U', --entitytype,
       0, --status,
       t_b_lot_cargo.b_lot_id, --b_lot_id,
       t_b_lot_cargo.b_cargo_id, --b_cargo_id,
       v_ss_vehicle_product.aa_org_id, --aa_sec_org_id,
       v_ss_vehicle_product.qty_num, --qty_num,
       '1', --sel_inout,--1 表示出货 0 表示进货
       v_ss_vehicle_product.update_date, --work_date,
       v_ss_vehicle_product.aa_sec_user_id_sale --aa_sec_user_id
       );
  
  end loop c_ss_vehicle_product;

  --如果“仓库”不为空,减少“仓库”的产品库位信息(B_LOT_STORE)

  for v_ss_vehicle_product_store in c_ss_vehicle_product_store loop
    if v_ss_vehicle_product_store.b_warehouse_id is not null then
      --则产生减少“仓库”的产品库位信息(B_LOT_STORE)
      update b_lot_store a
         set a.update_by   = t_aa_sec_user.aa_user_id,
             a.update_date = v_curr_date,
             a.qty_num     = a.qty_num - v_ss_vehicle_product_store.qty_num
       where a.b_cargo_id = v_ss_vehicle_product_store.b_cargo_id
         and a.b_Warehouse_Id = v_ss_vehicle_product_store.b_warehouse_id;
    
      --产生“仓库”的的产品库位跟踪记录(B_LOT_STORE_TRACK)的出库信息
      insert into b_lot_store_track
        (id,
         aa_headquarter_id,
         aa_client_id,
         aa_org_id,
         create_by,
         create_date,
         update_by,
         update_date,
         isactive,
         entitytype,
         status,
         b_cargo_id,
         b_warehouse_id,
         qty_num,
         sel_inout,
         work_date,
         aa_sec_user_id)
      values
        (b_lot_store_track_seq.nextval, --id
         t_aa_sec_user.aa_headquarter_id, --aa_headquarter_id,
         t_aa_sec_user.aa_client_id, --aa_client_id
         t_aa_sec_user.aa_org_id, --aa_org_id
         t_aa_sec_user.aa_user_id, --create_by
         v_curr_date, --create_date,
         t_aa_sec_user.aa_user_id, --update_by,
         t_b_lot_cargo.update_date, --update_date,
         'Y', --isactive,
         'U', --entitytype,
         0, --status,
         v_ss_vehicle_product_store.b_warehouse_id, --b_warehouse_id,
         v_ss_vehicle_product_store.aa_org_id, --aa_sec_org_id,
         v_ss_vehicle_product_store.qty_num, --qty_num,
         '1', --sel_inout,--1 表示出货 0 表示进货
         v_ss_vehicle_product_store.update_date, --work_date,
         v_ss_vehicle_product_store.aa_sec_user_id_sale --aa_sec_user_id
         );
    end if;
  
  end loop v_ss_vehicle_product_store;

  -------------------------------------------------------------------------------------------
  /*
  最后返回消息  0(错误),1(成功但不提示),2(成功并提示)
  */
  v_result := '提示: 操作成功!';
  v_ok     := 1;

exception
  when error1 then
    v_ok := 0;
    rollback;
  when others then
    rollback;
    v_result := '错误: ' || v_id || sqlerrm;
    v_ok     := 0;
end SS_VEHICLE_PRODUCT_CONFIRM;


 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页