Oracle生成流水号函数

1:日期范围上

smalldatetime的有效时间范围1900/1/1~2079/6/6
datetime的有效时间范围1753/1/1~9999/12/31

2:精准度上

smalldatetime只精准到分,而datetime则可精准到3位的毫秒。

3:存储空间上

smalldatetime占用4个字节,前2个字节存储base date(1900年1月1日)之后的天数。后2个字节存储午夜后的分钟数。

datetime占用8个字节,前4个字节存储base date(即1900年1月1日)之前或之后的天数,后4个字节存储午夜后的毫秒数

Oracle生成流水号函数

CREATE OR REPLACE FUNCTION fn_no_make(v_type       VARCHAR2,
                                      v_number_col VARCHAR2,
                                     v_table_name VARCHAR2)
/*
  * 参数说明:
  * v_type: 编码前缀
  * v_number_col:编码所在列名
  * v_table_name:编码所在表名
  */
 RETURN VARCHAR2 IS
  v_old_no   VARCHAR2(50); --原编码
  v_old_num  NUMBER; -- 原编码后五位编号
  v_new_num  VARCHAR2(10); --新编码后五位编号
  v_maked_no VARCHAR2(50); --新编码
  v_date_no  VARCHAR2(20); --当前日期编号
  v_sql      VARCHAR2(4000);
BEGIN

  v_sql := ‘SELECT MAX(‘ || v_number_col || ‘) FROM ‘ || v_table_name;
  EXECUTE IMMEDIATE v_sql
    INTO v_old_no;

  v_sql := ‘SELECT SUBSTR(TO_CHAR(SYSDATE,‘‘YYMMDD‘‘), 1, 6) AS DATE_NO FROM DUAL‘;
  EXECUTE IMMEDIATE v_sql
    INTO v_date_no;

  v_old_num := to_number(substr(v_old_no, 11, 5));
  v_new_num := to_char(v_old_num + 1);

  WHILE length(v_new_num) < 5
  LOOP
    v_new_num := ‘0‘ || v_new_num;
  END LOOP;

  IF v_old_no IS NULL OR
     substr(v_old_no, 5, 6) <> v_date_no
  THEN
    v_maked_no := v_type || v_date_no || ‘00001‘;
  ELSE
    v_maked_no := v_type || v_date_no || v_new_num;
  END IF;

  RETURN(v_maked_no);
EXCEPTION
  WHEN OTHERS THEN
    dbms_output.put_line(SQLERRM);
END fn_no_make;

1.数据库导入,导出命令

 数据导出:
a. 将数据库TEST完全导出,用户名system 密码manager 导出到D:\daochu.dmp中
   exp test/test@ORACLE_192.168.28.1 file=d:\daochu.dmp full=y

b. 将数据库中system用户与sys用户的表导出
   exp  test/test@ORACLE_192.168.28.1  file=d:\daochu.dmp owner=(system,sys)
数据导入:

a 将D:\daochu.dmp 中的数据导入 TEST数据库中。
   imp dev/dev@ORACLE_192.168.28.2  file=d:\daochu.dmp
   imp dev/dev@ORACLE_192.168.28.2 full=y  file=file= d:\data\newsmgnt.dmp ignore=y
   上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。
   在后面加上 ignore=y 就可以了。
b 将d:\daochu.dmp中的表table1 导入
imp dev/dev@TEST  file=d:\daochu.dmp  tables=(table1)

2.数据库表中Clob,Blob 导入导出命令

exp  数据库用户名/密码@配置名称  file=输出文件路径  log=日志文件路径  tables=(数据库表名)  query=\"查询条件\"

imp 数据库用户名/密码@配置名称  file=输入文件路径  log=日志文件路径  tables=(数据库表名)  ignore=y

exp test/test@ORACLE_192.168.28.1  file=c:\11.dmp log=c:\11.log tables=(table1) query=\"where  createdby=‘sysadmin‘  and to_char(createtime,‘YYYY-MM-DD‘)=‘2012-05-17‘\"

imp dev/dev@ORACLE_192.168.28.2 file=c:\11.dmp log=c:\121.log tables=(table1) ignore=y

用cmd.exe 执行就可以,注意的地方就是query 地方 \"

先执行exp 后执行imp
时间: 2024-08-06 22:20:15

Oracle生成流水号函数的相关文章

Oracle生成流水号

流水号规则表Rul_Sequence: 规则表中的数据: 生成流水号辅助的存储过程: CREATE OR REPLACE PROCEDURE Proc_GetSeqence(SeqCode in varchar2,ReturnNum out Varchar2,MessageCode out varchar2 ) -- 异常消息等 is seqNowNumStr VARCHAR2(20); SeqNowNum int; --当前值 year CHAR(4); --年 YYYY month CHAR

Oracle中SYS_CONNECT_BY_PATH函数的妙用

在Oracle中,SYS_CONNECT_BY_PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示. AD: Oracle中SYS_CONNECT_BY_PATH函数是非常重要的函数,下面就为您介绍一个使用SYS_CONNECT_BY_PATH函数的例子,实例如下: create table test (a varchar2(10),b varchar2(10)); INSERT INTO TEST (A, B) VALUES ('1', '我');

Oracle数据库实用函数

实用函数 DECODE 语法如下: DECODE(value, if1, then1, if2,then2,if3,then3, . . . else )  Value 代表某个表的任何类型的任意列或一个通过计算所得的任何结果.当每个value值被测试,如果value的值为if1,Decode 函数的结果是then1:如果value等于if2,Decode函数结果是then2:等等.事实上,可以给出多个if/then 配对.如果value结果不等于给出的任何配对时,Decode 结果就返回els

Oracle生成千万测试数据

oracle 生成千万测试数据 做数据库开发或管理的人经常要创建大量的测试数据,动不动就需要上万条,如果一条一条的录入,那会浪费大量的时间,本文介绍了Oracle中如何通过一条SQL快速生成大量的测试数据的方法.产生测试数据的SQL如下: SQL> select rownum as id, 2                                 to_char(sysdate + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as inc_

Oracle中REGEXP_SUBSTR函数(转)

Oracle中REGEXP_SUBSTR函数 Oracle中REGEXP_SUBSTR函数的使用说明: 题目如下:在oracle中,使用一条语句实现将'17,20,23'拆分成'17','20','23'的集合. REGEXP_SUBSTR函数格式如下:function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)__srcstr :需要进行正则处理的字符串__pattern :进行匹配的正则表达式__positio

新增时自动生成流水号ID

在项目中,新增某条记录的时候,为了定义某个不可重复的值,会采用自动生成流水号的方式来定义这个值.根据需要,定义的方法也多种多样,比如日期加3位流水号(例:20180115001).因此了解到两种生成流水号的方法: 一.Java生成流水号 生成流水号格式为yyyyMMddXXXX import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.Date; public class Primary

生成流水号的优化

最近写的项目有一个生成流水号的场景,数据需要设置到千万. 场景:客户查询时需要上传文件,为文件生成递增的流水号,需要递增,数量要预留千万. 问题:因为上传文件的频率并不高,所以不适合使用批量操作.但是每次上传都要去oracle数据库读取上一次的流水号,感觉效率很低. 解决方案:原理:使用Redis实现类似于Lazy load的流水号加载. 每次上传先检查Redis中是否有最新的流水号,如果有则直接使用,并将原值更新为自增后的值.如果没有,则从oracle数据库中加载一次存入Redis. 这样可以

Oracle 中 decode 函数用法

Oracle 中 decode 函数用法 含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN RETURN(翻译值2) ......ELSIF 条件=值n THEN RETURN(翻译值n)ELSE RETURN(缺省值)END IFdecode(字段或字段的运算,值1,值2,值3) 这个函数运行的结果是,当字段或字段的运算的值等于值1时,该函数返回值

【转】oracle的substr函数的用法

[转]oracle的substr函数的用法 oracle的substr函数的用法 取得字符串中指定起始位置和长度的字符串   substr( string, start_position, [ length ] ) 如:     substr('This is a test', 6, 2)     would return 'is'     substr('This is a test', 6)     would return 'is a test'     substr('TechOnThe