plsqlfunction
⑴ oracle中自定義的函數怎麼編譯
可在第三方軟體中,如pl/sql中編譯。
1、打開pl/sql軟體並登錄到指定資料庫。
2、點擊左上方像紙片的按鈕,然後點擊「sql窗口」
⑵ PlSql如何新建Function函數
PL/SQLDeveloper是一個集成開發環境,專門開發面向Oracle資料庫的應用。PL/SQL也是一種程序語言,叫做過程化SQL語言(ProceralLanguage/SQL)。我們趕緊來看看,PlSql如何新建Function函數。
1我們在PlSql軟體的文件菜單中,點擊一下即可看到新建。
2此時,我們選擇程序窗口就能開始設置。
3然後我們在新建下,就能看到Function函數。
4但是,我們需要指定Function函數的名稱。
5名稱設置後,我們還能設置Parametes的屬性。
6再然後就可以設置ReturnType返回類型。
⑶ 我寫了一個pl/sql,主要是用游標遍歷一張表.
1.檢查一下游標C1中查詢語句的執行計劃,看看是不是耗時很多。10萬數據並不多,而且你做了函數索引。所以我滾納滑猜這個不是問大臘題產生的原因;
2.檢查一下你的兩層循環到底有多少次,是不茄薯是次數過多。目測不會超過10萬吧。所以應該也不是問題關鍵;
*.以上兩點可以通過使用plsql developer工具debug該過程時,點擊create profiler report,然後執行,再從debug界面的profiler分頁查看。
3.你的過程中 update cyd 和 fhz,執行過程的時候,有沒有什麼其他程序再多兩個表做update,有沒有鎖表。cup使用率是否高;
4.通常不要在查詢a表的循環中對a表update。你這里查詢Cyd內部就對Cyd進行了update,這樣有問題。我曾經遇到過,程序會鎖住。
*.對於你的程序,給你個建議,把一下這段代碼寫成一個function,在由表中查尋結果中直接調用:
FOR i IN 1 .. Lengthb(Yw_Old) LOOP
Tmp := Substr(Yw_Old, i, 1);
IF (Tmp = 'A') THEN
Yw_New := Yw_New || 'B3';
ELSIF (Tmp = 'B') THEN
Yw_New := Yw_New || 'B3';
ELSIF (Tmp = 'C') THEN
Yw_New := Yw_New || 'C1';
ELSIF (Tmp = 'D') THEN
Yw_New := Yw_New || 'D1';
END IF;
END LOOP;
*.假設function叫做fun_pack,游標改成這樣:
CURSOR C1 IS
SELECT Cyh,
fun_pack(Yw),
Pzyw,
Djyw
FROM Cyd
WHERE Substr(Slsj, 1, 4) = Yearc;