日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

主键字母自动生成函数

發布時間:2025/3/11 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主键字母自动生成函数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
-- 動態生成字母方式主鍵,A-Z 大于Z自動進位【26進制數值表示】-- 參數:動態查詢表和主鍵列 create or replace function charkey (tabName char, pkName char) return char asv_key varchar2(4); -- 表中查詢出當前主鍵列最大值v_char varchar2(4) := ''; -- 輸出用變量v_len number(1); -- 查詢出最大值字符串長度v_i number(1); -- 循環控制變量v_c char(1); -- 提取單個字符變量v_flag number(1) := 1; -- 是否'進位'變量v_count number; -- 查詢表中記錄總數 begin-- 查詢表中記錄數execute immediate 'select count(1) from ' || tabName into v_count;-- 如果表中沒有記錄,則返回'A'if (v_count = 0) then v_char := 'A';return v_char;end if;-- 獲取指定表中主鍵列當前最大值execute immediate 'select ' || pkName || ' from ' ||'(select rownum r, t.' || pkName || ' from ' ||'(select ' || pkName || ' from ' || tabName || ' order by length(' || pkName || ') desc, ' || pkName || ' desc) t) where r < 2'into v_key;-- 字符串長度v_len := length(v_key);-- 循環控制變量v_i := v_len;-- 從最后一個字符開始,向前循環遍歷while v_i >= 1 loopv_c := substr(v_key, v_i, 1);-- 如果需要進位,當前字符+1if(v_flag = 1) thenv_c := chr(ascii(v_c)+1);v_flag := 0;end if;-- 當前字符超出上限if( ascii(v_c) > ascii('Z')) thenv_c := 'A';v_flag := 1;end if;v_char := v_c || v_char;v_i := v_i - 1;end loop;-- 如果遇到ZZ情況,需要補充一位'A'if(v_flag = 1) thenv_char := 'A' || v_char;end if; return v_char; end;-- 測試表 create table testtab (id varchar2(4) primary key,val number(4) );-- 測試通過函數動態生成主鍵插入數據 declarev_count number(9) := 1; beginwhile v_count <= 30 loopinsert into testtab values(charkey('testtab','id'), 1); v_count := v_count + 1;end loop; end;select * from testtab;

總結

以上是生活随笔為你收集整理的主键字母自动生成函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。