oracle 学习笔记

最后更新日:2010-4-21
  1.  在jdbc中使用sequence,需要在之前先使用query语句得到新的sequence值。例如:


SELECT 'schema'.'sequence's name'.nextval from dual;
--seqNum 就是上面得到的sequence新值
insert into table (id,name) values(seqNum, '
poker ');

commit;
 2.oracle 数据库中,有关lock的view有下面的说明。是转载的。

oracle v$lock视图中,下面对type,ID1,ID2三个列的具体含义说明下:

  TYPE   有TM,TX两种类型,TX为行级锁,事物锁,TM锁为表级锁

 

TYPE

ID1

ID2

TM

被修改表的标识(object_id

0

TX

以十进制数值表示该事务所占用的回滚段号与该事务在该回滚段的事务表(Transaction table)中所占用的槽号(slot number,可理解为记录号)。其组成形式为:0xRRRRSSSS ( RRRR = RBS number, SSSS = slot )

以十进制数值表示环绕(wrap)次数,即该槽(slot)被重用的次数;

 

 

当type为TM时,6718为对象ID号

SQL> select type,id1,id2 from v$lock where sid in (16,17);

TYPE        ID1        ID2
---- ---------- ----------
TX        65572         56
TM         6718          0
TM         6718          0
TX        65572         56

SQL> select object_id from DBA_OBJECTS WHERE WNER='SYS' and object_name='TEST';

 OBJECT_ID
----------
      6718

SQL>

当type为TX时,65572通过以下换算方式得到回滚段号和回滚段所占用的事物槽号

SQL> select xidusn,xidslot from v$transaction;

    XIDUSN    XIDSLOT
---------- ----------
         1         36

 

SQL> select trunc(65572/65536),mod(65572,65536) from dual;

TRUNC(65572/65536) MOD(65572,65536)
------------------ ----------------
                 1               36

3.使用存储过程和方法。

自己做的一个方法的例子。不复杂,但是可以作为参考

create or replace FUNCTION test(
p_day_of_month in INTEGER,
p_forecast in INTEGER
) 
RETURN NVARCHAR2 AS
  v_forecast_per_day INTEGER; --平均每天的forecast基本数量
  v_mod INTEGER;               --余数
  v_for_var INTEGER;           --用于for循环的变量
  v_ret NVARCHAR2(100);
begin
  v_forecast_per_day := TRUNC(p_forecast / p_day_of_month);
  v_mod := MOD(p_forecast , p_day_of_month);
  FOR v_for_var IN 1..p_day_of_month LOOP
      IF v_for_var <= v_mod THEN
            v_ret := v_ret || ' ' || (v_forecast_per_day + 1);
      ELSE
            v_ret := v_ret || ' ' || v_forecast_per_day;
      END IF;
  END LOOP;
  RETURN 'RET = ' || v_ret;
end test;

 存储过程和存储方法的区别仅仅在返回值上。过程没有返回值,而方法是一定有返回值的。

你可能感兴趣的:(oracle,sql,.net,jdbc)