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 ...