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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM