1. 程式人生 > >呼叫指令碼的方式自動的建立或者是更新oracle資料庫自帶的Seq序列號的值

呼叫指令碼的方式自動的建立或者是更新oracle資料庫自帶的Seq序列號的值

CREATE OR REPLACE PACKAGE PKG_QUERY IS

  -- Author  : ADMINISTRATOR
  -- Created : 2016/12/8 星期四 10:28:37
  -- Purpose : 用做查詢遊標

  -- Public type declarations
  TYPE CUR_QUERY IS REF CURSOR;

END PKG_QUERY;
/

create or replace function create_seq_func(
   seq_name in  varchar2 ,/*seq名稱*/
   bus_table_name 
in
varchar2,/*業務表名*/ pkcloumn_name in varchar2 /*業務表主鍵名*/ ) return varchar2 is result varchar2(30000); type ref_cursor_type is ref cursor; cursor_ids ref_cursor_type; cursor_ids_1 ref_cursor_type; V_NUM number:=0; v_max_seq number :=1; v_max_seq_1 number :=1; v_max_sql varchar(4000); v_max_sql_1 varchar(4000); v_sql_alter
varchar
(4000); v_sequence_sql varchar(4000); begin select count(0) into V_NUM from user_sequences where sequence_name = seq_name; if V_NUM > 0 then v_max_sql_1:='select to_number(max('||pkcloumn_name||')+100) from '||bus_table_name||' t '; dbms_output.put_line('_____0_______
'||v_max_sql_1); open cursor_ids_1 for v_max_sql_1 ; fetch cursor_ids_1 into v_max_seq_1; /** 判斷 是否有id 值查詢出來 */ if cursor_ids_1%found then while cursor_ids_1%found loop dbms_output.put_line('_____1_______'||v_max_seq_1); ---把自動增長值設定為 業務表的最大值 v_sql_alter :='ALTER SEQUENCE '||seq_name||' INCREMENT BY '|| v_max_seq_1; dbms_output.put_line('_____3_______'||v_sql_alter); execute immediate v_sql_alter; ---獲取下一個值 v_sql_alter :=' SELECT '||seq_name||'.NEXTVAL FROM DUAL '; dbms_output.put_line('_____4_______'||v_sql_alter); -- execute immediate v_sql_alter; open cursor_ids_1 for v_sql_alter ; fetch cursor_ids_1 into v_max_seq_1; /** 判斷 是否有id 值查詢出來 */ if cursor_ids_1%found then while cursor_ids_1%found loop dbms_output.put_line('_____4_1_______'||v_max_seq_1); v_max_seq:=v_max_seq_1; ---把自動增長值設定為1 v_sql_alter :='ALTER SEQUENCE '||seq_name||' INCREMENT BY 1 ' ; dbms_output.put_line('_____5_______'||v_sql_alter); execute immediate v_sql_alter; ---獲取下一個值 v_max_sql_1 :=' SELECT '||seq_name||'.NEXTVAL FROM DUAL '; dbms_output.put_line('_____6_______'||v_max_sql_1); open cursor_ids_1 for v_max_sql_1 ; fetch cursor_ids_1 into v_max_seq_1; /** 判斷 是否有id 值查詢出來 */ if cursor_ids_1%found then while cursor_ids_1%found loop dbms_output.put_line('_____2_______'||v_max_seq_1); v_max_seq:=v_max_seq_1; fetch cursor_ids_1 into v_max_seq_1; exit when cursor_ids%notfound or cursor_ids%notfound is null ; end loop; end if; fetch cursor_ids_1 into v_max_seq_1; exit when cursor_ids%notfound or cursor_ids%notfound is null ; end loop; end if; fetch cursor_ids_1 into v_max_seq_1; dbms_output.put_line('_____2_______'||v_max_seq_1); exit when cursor_ids%notfound or cursor_ids%notfound is null ; end loop; end if; else v_sequence_sql :='create sequence '||seq_name||' minvalue 1 maxvalue 999999 start with 1 increment by 1 cache 20'; dbms_output.put_line('_____11_______'||v_sequence_sql); execute immediate v_sequence_sql; v_max_sql_1:='select to_number(max('||pkcloumn_name||')+100) from '||bus_table_name||' t '; dbms_output.put_line('_____10_______'||v_max_sql_1); open cursor_ids_1 for v_max_sql_1 ; fetch cursor_ids_1 into v_max_seq_1; /** 判斷 是否有id 值查詢出來 */ if cursor_ids_1%found then while cursor_ids_1%found loop dbms_output.put_line('_____11_______'||v_max_seq_1); ---把自動增長值設定為 業務表的最大值 v_sql_alter :='ALTER SEQUENCE '||seq_name||' INCREMENT BY '|| v_max_seq_1; dbms_output.put_line('_____13_______'||v_sql_alter); execute immediate v_sql_alter; ---獲取下一個值 v_sql_alter :=' SELECT '||seq_name||'.NEXTVAL FROM DUAL '; dbms_output.put_line('_____4_______'||v_sql_alter); -- execute immediate v_sql_alter; open cursor_ids_1 for v_sql_alter ; fetch cursor_ids_1 into v_max_seq_1; /** 判斷 是否有id 值查詢出來 */ if cursor_ids_1%found then while cursor_ids_1%found loop dbms_output.put_line('_____4_1_______'||v_max_seq_1); v_max_seq:=v_max_seq_1; ---把自動增長值設定為1 v_sql_alter :='ALTER SEQUENCE '||seq_name||' INCREMENT BY 1 ' ; dbms_output.put_line('_____5_______'||v_sql_alter); execute immediate v_sql_alter; ---獲取下一個值 v_max_sql_1 :=' SELECT '||seq_name||'.NEXTVAL FROM DUAL '; dbms_output.put_line('_____6_______'||v_max_sql_1); open cursor_ids_1 for v_max_sql_1 ; fetch cursor_ids_1 into v_max_seq_1; /** 判斷 是否有id 值查詢出來 */ if cursor_ids_1%found then while cursor_ids_1%found loop dbms_output.put_line('_____2_______'||v_max_seq_1); v_max_seq:=v_max_seq_1; fetch cursor_ids_1 into v_max_seq_1; exit when cursor_ids%notfound or cursor_ids%notfound is null ; end loop; end if; fetch cursor_ids_1 into v_max_seq_1; exit when cursor_ids%notfound or cursor_ids%notfound is null ; end loop; end if; fetch cursor_ids_1 into v_max_seq_1; dbms_output.put_line('_____17_______'||v_max_seq_1); exit when cursor_ids%notfound or cursor_ids%notfound is null ; end loop; end if; end if; return v_max_seq; EXCEPTION WHEN OTHERS THEN RETURN v_max_seq; end; /

相關推薦

呼叫指令碼方式自動建立或者更新oracle資料庫Seq序列

CREATE OR REPLACE PACKAGE PKG_QUERY IS -- Author : ADMINISTRATOR -- Created : 2016/12/8 星期四 10:28:37 -- Purpose : 用做查詢遊標 -- Public type declarat

A.CTable開源框架Mybatis增強自動建立表/更新表結構/實現類似hibernate共通的增刪改查

mybatis-enhance-actable-0.0.1 不用再為mybatis無法自動建立表,不提供基本的增刪改查而苦惱啦!有了A.CTable這將不再成為你苦惱的理由,而且學習簡單,只要進行簡單的配置,然後稍微看下原始碼註解就可以上手了,A.CTable

windows下自動備份mysql和oracle資料庫

rem ******Oracle backup start********  @echo off      forfiles /p "C:\DatabaseBackup\egov\essucap" /m essucap_backup_*.dmp -d -7

建立多個Oracle資料庫及相應的例項

對於使用過SQL Server資料庫的使用者可以會對Oracle中的資料庫的例項的概念理解的不是很好,所以我產生了寫一篇博文的想法。 基礎概念 一般Oracle資料庫(Oracle Database)可以分為兩部分,即例項(Instance)和資料庫(Database)。

更新oracle資料庫表如何實現主鍵增長

        在資料庫中實現主鍵自動增長有利於我們做資料插入操作,在SQL SERVER上建立表時可以在int型別的欄位後加上identity(1,1),該欄位就會從1開始,按照+1的方式自增,將這個欄位設定為主鍵。MySql中可以使用“auto_increment

在java的hibernate3框架中呼叫oracle資料庫遊標引數的儲存過程

Calendar cal=Calendar.getInstance(); String curyear=Integer.toString(cal.get(GregorianCalendar.YEAR

一個MySql例項自動建立多個Activiti資料庫問題

一次使用SSH和Activiti6開發的專案中,在伺服器啟動的時候就報錯:org.apache.ibatis.exceptions.PersistenceException: ### Error querying database.  Cause: java.sql.SQLS

MAC EI Capitan上更新系統SVN版本(關閉SIP方能sudo rm)

找到 不用 http 感覺 sco 註意 蛋疼 path 保護 繼昨晚之後。決定更新系統自帶的svn。自帶的svn版本號是1.7。看官網svn:http://www.wandisco.com/subversion/download#osx 最新版本號是1.9.13,決定

Oracle資料庫定義函式練習

--測試函式3 CREATE OR REPLACE FUNCTION FN_TEST3 (NUM IN VARCHAR2) RETURN VARCHAR2 IS TYPE VARCHAR2_ARR IS TABLE OF VARCHAR2(300); NUMARR VARCHAR2_ARR; TEMPN

oracle資料庫定義split函式

--dba授予建立型別的許可權 grant CREATE ANY TYPE to userName; --普通使用者建立 CREATE OR REPLACE TYPE type_str IS TABLE OF VARCHAR2 (100) ; -- 再建立split函式,程式碼如下: C

時獲取Mysql增主鍵的Oracle增主鍵的

<insert> parameterType:引數型別,可以省略,  1、獲取自增主鍵的值:         mysql支援自增主鍵,自增主鍵值的獲取,mybatis也是利用statement.getGenreat

oracle資料庫定義函式get_uuid()

1.oracle資料庫自定義函式get_uuid() 1 CREATE OR REPLACE FUNCTION GET_UUID 2 RETURN VARCHAR IS guid VARCHAR (50); 3 BEGIN 4 guid := lower(RAWTOHEX(sys_g

Netty之傳輸POJO(使用Java序列方式)

1、使用Netty傳輸POJO物件,重點在於物件的序列化。序列化的物件通過TCP進行網路傳輸,結合Netty提供的物件編解碼器,可以做到遠端傳輸物件。首先Java需要序列化的物件,需要實現java.io.Serializable介面. 2、工程目錄        2.1 專

Oracle 資料表資訊

1.登陸系統使用者 sqlplus 然後輸入系統使用者名稱和密碼 登陸別的使用者 conn 使用者名稱/密碼; 2.建立表空間 create tablespace 空間名 datafile 'c:\空間名' size 15M  --表空間的存放路徑,初始值為15M auto

Oracle資料庫表中查詢最大和第二大

我們以機構表為例,機構表中的id欄位是varchar2型別的,而不是number型別,所有要先轉換為number。 select to_number(id) as id from ORGANIZATION; 執行效果如下圖所示: 我們按降序排序來查詢, select to

Oracle資料庫order by排序之null處理方法

最近在忙活公司產品後臺的資料報表,在對業務資料排序時候,發現有些欄位的記錄是null值,這時排序便出現了有違我們使用習慣的資料大小順序問題。在Oracle中規定,在Order by排序時預設認為null是最大值,所以如果是ASC升序則被排在最後,而DESC降序則排在最前。

Oracle給查詢結果增加序列

() order table from ble 解決辦法 個人 number sele 在oracle中,需要加一個序列號,首先想到是用rownum這個關鍵字,比如sql如下 select rownum,t.* from table t 以上sql如果不增加排序,這個數據沒

39 Oracle深度學習筆記——自動建立ASM UDEV裝置指令碼

指令碼如下:   i=`lsscsi | grep updisk | awk '{print $6}' | awk -F '/' '{print $3}' | xargs` for j in $i do temp=`/sbin/scsi_id -g -u /dev/"$j"` e

Linux下Oracle資料庫自動備份Shell指令碼

1.在伺服器建立備份目錄,並賦予許可權 mkdir -p /backup/P_DATA  #新建shell指令碼存放路徑 mkdir -p /backup/P_DB_BACK  #新建Oracle資料庫備份目錄 chown -R oracle:oinstall /backup/P

Golang工程自動建立指令碼

1.Windows 版本 gogo.bat 參考Linux版本修改而來 rem 參考程式原文:http://www.cnblogs.com/ficow/p/6553344.html rem Alex hu rem 2017-07-26 rem 建立目錄 mkdir %1 cd %1