Oracle基礎 程式包篇

2021-10-20 22:39:18 字數 4923 閱讀 7729

oracle資料庫中,程式包是一系列相關儲存過程和函式的集合,通過程式包可以簡化語句塊的編寫,便於對各種過程、函式進行分類。

宣告程式包中各種函式或者儲存過程,只有在包頭中宣告過的才可以通過包直接對外部提供。

包頭中宣告的函式或儲存過程必須在包體中實現,並且引數型別和返回值型別必須一致。

可以使用constant 常量名宣告常量

create

orreplace package mypackage as

type mycursor is ref cursor

;-- 自定義資料型別,類似於游標性質

procedure queryemplist(dno in number,emplist out mycursor)

;-- 宣告儲存過程

end mypackage

對包頭中宣告的每乙個方法進行實現。

create

orreplace package body mypackage as

-- 宣告包體

procedure queryemplist(dno in number,emplist out mycursor)

as-- 宣告儲存過程的實現

begin

open emplist for

select

*from emp where deptno = dno;

-- select語句查詢的結果由游標表示 開啟游標.for表示代指的結果集

end queryemplist;

-- 表示儲存過程的結束

end mypackage;

-- 檢視資料型別

select

*from user_objects;

-- 檢視源**

select

*from user_source;

-- 刪除包

drop package 包名;

重新編譯

編譯形式

alter package 包名 complete [debug] package | specification | body [reuse settings]

;

示例:

alter package emp_pkg package;
包的作用域
create

orreplace 包名

as pragma serially_reusable;

變數...

方法...

end 包名;

方法的過載

相同方法名,不同引數列表的一類方法

包的初始化

在包頭中可以定義複雜的變數型別,而在包體中使用 begin…end 直接進行初始化定義

包的純度級別

如果在包中定義了函式,那麼可以通過sql進行呼叫,如果對包中函式進行限制,則可以使用包純度限制

pragma restrict_references(函式名,[wnds] [,wnps] [,rnds] [,rnps])其中

注意:如果使用者定義的是公共sql函式,則必須符合wnds(不能dml),wnps(不能寫包變數),rnps(不能讀包變數)

滿足這三個純度要求的函式即為公共函式.

系統自帶的輸出包,將內容輸出到日誌或者伺服器介面

select * from all_source s where s.name = 'dbms_output';方法

說明dbms_output.enable(buffer_size => )啟用緩衝區,指定緩衝區大小位元組

dbms_output.disable關閉緩衝區

dbms_output.put(a => )將內容防止在緩衝中,不包括換行,等待輸出

dbms_output.put_line(a => )輸出指定內容,包括換行

dbms_output.new_line在輸出末尾增加換行,並輸出緩衝區

dbms_output.get_line(line => , status => )獲得一行資料,status為取回結果,1表示獲取到一行資料,0表示沒有取到

dbms_output.chararr

dbms_output.get_lines(lines => , numlines => )lines將要取回的行的巢狀表,numlines實際取回的行數

資料庫端實現的定時排程任務

dbms_job.any_instance                        

dbms_job.isubmit(job =

>

, what =

>

, next_date =

>

,interval

=>

, no_parse =

>

)dbms_job.submit(job =

>

, 提交作業,作業號

what =

>

, 作業任務

next_date =

>

, 開始日期

interval

=>

, 間隔,單位天

no_parse =

>

, 是否重複

instance =

>

,force

=>

)

dbms_job.remove(job =

>

) 傳入作業號,刪除job

dbms_job.change(job =

>

, what =

>

, next_date =

>

,interval

=>

, instance =

>

,force

=>

)

dbms_job.what(job =

>

, what =

>

)

dbms_job.next_date(job =

>

, next_date =

>

)dbms_job.instance(job =

>

, instance =

>

,force

=>

)dbms_job.

interval

(job =

>

,interval

=>

)

dbms_job.broken(job =

>

, broken =

>

, next_date =

>

)dbms_job.run(job =

>

,force

=>

)

dbms_job.user_export(job =

>

, mycall =

>

)dbms_job.background_process

dbms_job.is_jobq

-- 檢視任務job

select

*from user_jobs;

處理字元,將一些敏感字元進行轉換

-- 查詢sql查詢物件是否存在

select dbms_assert.******_sql_name(

'emp'

)from dual;

-- 驗證物件名是否符合語法規則

select dbms_assert.qualified_sql_name(

'emp_v'

)from dual;

-- 驗證輸入是否為有效輸入的schema名稱

select dbms_assert.schema_name(

'scott'

)from dual;

-- 驗證sql查詢物件是否存在

select dbms_assert.sql_object_name(

'emp'

)from dual;

-- 為傳入字串增加雙引號

select dbms_assert.enquote_name(

'abc'

)from dual;

-- 傳入字串左右增加單引號

select dbms_assert.enquote_literal(

123)

from dual

oracle中的程式包

一 程式包的基本概念 程式包可將若干函式或者儲存過程組織起來,作為乙個物件進行儲存。程式包通常由兩部分構成,規範 specification 和主體 body 程式報也可以包含常量和變數,包中的所有函式和儲存過程都可以使用這些變數或者常量。二 規範 1 建立規範 sql視窗 create or re...

adb 工具關閉程式包,開啟程式包,查詢程式包

1.關閉程式包 關閉的是google搜尋的包 命令是 adb shell am force stop com.android.quicksearchbox 2.開啟程式包 開啟的是google搜尋的包 命令是 adb shell am start w n com.android.quicksearc...

程式包例子

create or replace package test package is procedure pro test01 num arg in number function fun test02 return number end test package create or replace ...