游標是什么: 游標字面理解就是游動的光標。
用數(shù)據(jù)庫語言來描述:游標是映射在結(jié)果集中一行數(shù)據(jù)上的位置實體,有了游標用戶就可以訪問結(jié)果集中的任意一行數(shù)據(jù)了,將游標放置到某行后,即可對該行數(shù)據(jù)進行操作,例如提取當前行的數(shù)據(jù)等等。 游標的分類: 顯式游標和隱式游標 顯示游標的使用需要4步: 1。
聲明游標 CURSOR mycur(vartype number) is select emp_no,emp_zc from cus_emp_basic where com_no = vartype; 2。打開游標 open mycur(000627) 注:000627:參數(shù) 3。
讀取數(shù)據(jù) fetch mycur into varno,varprice; 4。關(guān)閉游標 close mycur; 游標的屬性 oracle 游標有4個屬性: %ISOPEN , %FOUND , %NOTFOUND, %ROWCOUNT %ISOPEN 判斷游標是否被打開,如果打開%ISOPEN 等于true,否則等于false %FOUND %NOTFOUND 判斷游標所在的行是否有效,如果有效,則%FOUNDD等于true,否則等于false %ROWCOUNT 返回當前位置為止游標讀取的記錄行數(shù)。
示例: set serveroutput on; declare varno varchar2(20); varprice varchar2(20); CURSOR mycur(vartype number) is select emp_no,emp_zc from cus_emp_basic where com_no = vartype; begin if mycur%isopen = false then open mycur(000627); end if; fetch mycur into varno,varprice; while mycur%found loop dbms_output。 put_line(varno||','||varprice); if mycur%rowcount=2 then exit; end if; fetch mycur into varno,varprice;。
僅使用權(quán)限、角色、視圖甚至細粒度安全策略建立訪問控制系統(tǒng)還不能保證數(shù)據(jù)庫的安全。
因此,開啟審計數(shù)據(jù)庫的使用能讓我們知道訪問控制機制是否確實像所希望的那樣工作。 審計分為標準審計和細粒度審計,標準審計基于語句級、權(quán)限級和對象級。
而細粒度審計涉及某種粒度的數(shù)據(jù)訪問。 比如某個經(jīng)理應(yīng)該能夠看到為他工作的雇員工資有關(guān)信息。
那么,怎樣才能知道這位經(jīng)理是否還查看了他的頂頭上司的工資信息?是否要審計這位經(jīng)理的所有的select語句?這個時候利用細粒度審計 (FGA)可以只審計一個表種的某些行,還可以將FGA作為一種侵入檢測裝置。 1。
啟用審計 alter system set audit_trail = DB scope = spfile; 有些網(wǎng)站上寫可以scope = both,但是實際修改時無法修改指定的類型,只能修改到spfile重啟實例,還望達人指教。 audit_trail主要有如下幾個值: NONE:10g的默認值,表示禁用數(shù)據(jù)庫審計; OS:將審計記錄寫到一個操作系統(tǒng)文件中。
Examda提示: 寫入的目錄由audit_file_dest參數(shù)指定,但是注意:在Windows NT下(我是XP),審計記錄不啟用這個參數(shù),而是直接寫道本地管理日志,需要到管理中查看。 DB:將審計記錄寫入數(shù)據(jù)庫審計跟蹤,棵視為DBA_AUDIT_TRAIL(存儲在SYS。
AUD$表中)。啟用這個參數(shù)后注意將相關(guān)的幾張表以及索引從system表空間下改到另一個表空間。
select * from dba_tables t where t。 table_name = 'AUD$'; select * from dba_tables t where t。
table_name = 'AUDIT$'; select * from dba_tables t where t。table_name = 'AUDIT_ACTIONS'; alter table aud$ move tablespace TBS_PM; alter table AUDIT$ move tablespace TBS_PM; alter table AUDIT_ACTIONS move tablespace TBS_PM; alter index I_aud1 rebuild tablespace TBS_Index; alter index i_audit rebuild online tablespace TBS_Index; alter index i_audit_actions rebuild online tablespace TBS_Index; 另有DBExtened,XML這里不做介紹了,常用的就是以上3個。
2。修改AUDIT_TRAIL后,重啟實例,然后指定審計的表和活動。
create table test_audit ( col1 varchar2 (10) ); audit update on test_audit; audit insert on test_audit; insert into test_audit(col1) values ('dfasd3424'); update test_audit t set t。 col1 = '132rf'; commit; select * from dba_common_audit_trail; 1 Standard Audit 19330 8 1 15-9月 -08 12。
07。32。
343000 上午 +08:00 PREMOBILE PAUL_XI\Administrator WORKGROUP\PAUL_XI 1416:4828 PAUL_XI 0 PREMOBILE TEST_AUDIT 103 SESSION REC 05002F009C0A0000 0 0 NONE ------S--------- 2 Standard Audit 19353 33 1 15-9月 -08 10。 21。
02。328000 上午 +08:00 PREMOBILE PAUL_XI\Administrator WORKGROUP\PAUL_XI 1416:2348 PAUL_XI 0 PREMOBILE TEST_AUDIT 103 SESSION REC 09000F00DA0A0000 0 0 NONE ------S---S----- 3。
為審計使用系統(tǒng)級觸發(fā)器(個人認為這個已經(jīng)不是Audit審計功能,而僅僅是觸發(fā)器) 創(chuàng)建數(shù)據(jù)庫啟動觸發(fā)器 create table logon_audit ( user_id varchar2(30), sess_id number (10), logon_time date, logoff_time date, host varchar2(20) ); create or replace trigger logon_audit_trig after logon on database begin insert into logon_audit values(user,sys_context('userenv','sessionid'),sysdate,null,sys_context('userenv','host')); commit; end; select * from logon_audit; 1 PREMOBILE 19327 2008-9-14 23:51:22 WORKGROUP\PAUL_XI 2 PREMOBILE 19328 2008-9-14 23:51:35 WORKGROUP\PAUL_XI 3 SYSMAN 0 2008-9-14 23:49:44 PAUL_XI 4 SYSMAN 0 2008-9-14 23:50:49 PAUL_XI。
ORACLE 內(nèi)部函數(shù)篇 254。
CHARTOROWID(CHAR) 將包含外部語法 ROWID 的 CHAR 或 VARCHAR2 數(shù)值轉(zhuǎn)換為內(nèi)部的二進制語法 , 參數(shù) CHAR 必須是包含外部語法的 ROWID 的 18 字符的字符串 。 SELECT NAME FROM BSEMPMS WHERE ROWID=CHARTOROWID('AAAAfZAABAAACp8AAO'); NAME : LEIXUE 255。
CONVERT(CHAR,DEST_CHAR_SET,SOURCE_CHAR_SET) CONVERT 將字符串 CHAR 中的字符從 SOURCE_CHAR_SET 標識的字符集轉(zhuǎn)換為由 DEST_CHAR_SET 標識的字符集 SELECT CONVERT('GroB','US7ASCII','WE8HP') 'CONVERSION' FROM PUBS; CONVERSION: Gross 256。 HEXTORAW(CHAR) 將包含十六進制的 CHAR 轉(zhuǎn)換為一個 RAW 數(shù)值 。
INSERT INTO BSEMPMS(RAW_COLUMN) SELECT HEXTORAW('7D') FROM TEST; 257。 RAWTOHEX(RAW) 將 RAW 數(shù)值轉(zhuǎn)換為一個包含十六進制的 CHAR 值 。
SELECT RAWTOHEX(RAW_COLUMN) 'CONVERSION' FROM BSEMPMS; CONVERSION: 7D 258。 ROWIDTOCHAR(ROWID) 將一個 ROWID 數(shù)值轉(zhuǎn)換為 VARCHAR2 數(shù)據(jù)類型 。
SELECT ROWID FROM BSEMPMS WHERE ROWIDTOCHAR(ROWID) LIKE '%BR1AAB%'; 259。 TO_MULTI_BYTE(CHAR) 將 CHAR 中的單字節(jié)轉(zhuǎn)換為等價的多字節(jié)字符 。
SELECT TO_MULTI_BYTE('ASFDFD') FROM TEST; 260。 TO_SINGLE_BYTE(CHAR) 將 CHAR 中的多字節(jié)轉(zhuǎn)換為等價的單字節(jié)字符 。
SELECT TO_SINGLE_BYTE('ASFDFD') FROM TEST; 261。 TRANSLATE USING(TEXT USING {CHAR_CS|NCHAR_CS}) 將文本 TEXT 按照指定的轉(zhuǎn)換方式轉(zhuǎn)換成數(shù)據(jù)庫字符集和民族字符集 。
其中 TEXT 是待轉(zhuǎn)換的 。 USING CHAR_CS 參數(shù)轉(zhuǎn)換 TEXT 為數(shù)據(jù)庫字符集 , 輸出數(shù)據(jù)類型是 VARCHAR2。
USING NCHAR_CS 參數(shù)轉(zhuǎn)換 TEXT 為數(shù)據(jù)庫字符集 , 輸出數(shù)據(jù)類型是 NVARCHAR2。 CREATE TABLE TEST(CHAR_COL CHAR(20),NCHAR_COL NCHAR(20)); INSERT INTO TEST VALUES('HI,N'BYE'); SELECT * FROM TEST; 262。
DUMP(EXPR,RETURN_FORMAT,START_POSITION,LENGTH) 返回一個包含數(shù)據(jù)類型代碼 , 字節(jié)長度等內(nèi)部表示信息的 VARCHAR2 值 。 返回結(jié)果是當前數(shù)據(jù)庫字符集 , 數(shù)據(jù)類型按照下面規(guī)定的內(nèi)部數(shù)據(jù)類型的編碼作為一個數(shù)字進行返回 : 代 碼 數(shù)據(jù)類型 0 VARCHAR2 1 NUMBER 8 LONG 12 DATE 23 RAW 24 LONG RAW 69 ROWID 96 CHAR 106 MSSLABEL 參數(shù) RETUEN_FORMAT 指定按照下面的基數(shù)表示返回的數(shù)值 。
RETURN_FORMAT RESULT 8 8 進制 10 10 進制 16 16 進制 17 單字符表示 如果參數(shù) RETURN_FORMAT 沒有指定 , 則按十進制表示返回 。 如果參數(shù) START_POSITION 和 LENGTH 被指定 , 則從 START_POSITION 開始的長為 LENGTH 的字節(jié)將被返回 , 缺省是返回整數(shù)表示 。
SELECT DUMP('ABC',1016) FROM TEST; select dump(ename,8,3,2) 'example' from emp where name='ccbzzp'; 263。 empty_b|clob() 返回一個空的 LOB 定位符 , 用在初始化 LOB 變量 , 或用在 INSERT 及 UPDATE 聲明去初始化 LOB 列或?qū)⑵鋵傩灾脼榭?。
INSERT INTO TABLE1 VALUES(EMPTY_BLOB()); UPDATE TABLE1 SET CLOB_COL=EMPTY_BLOB(); 264。 BFILENAME('DIRECTORY','FILENAME') 返回一個 BFILE 定位符 , 相關(guān)的二進制 LOB 物理文件在服務(wù)器的文件系統(tǒng)上 。
目錄 DIRECTORY 是指在服務(wù)器的文件系統(tǒng)上實際搜索路徑全名的別名 。 FILENAME 是指服務(wù)器的文件系統(tǒng)的文件名 。
相關(guān)內(nèi)容:oracle問題集匯總。
oracle入門知識 一個表空間只能屬于一個數(shù)據(jù)庫每個數(shù)據(jù)庫最少有一個控制文件(建議3個,分別放在不同的磁盤上) 每個數(shù)據(jù)庫最少有一個表空間(system表空間) 建立system表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率,只應(yīng)存放數(shù)據(jù)字典 每個數(shù)據(jù)庫最少有兩個聯(lián)機日志組,每組最少一個聯(lián)機日志文件 一個數(shù)據(jù)文件只能屬于一個表空間一個數(shù)據(jù)文件一旦被加入到一個表空間中,就不能再從這個表空間中移走,也不能再加入到其他表空間中 建立新的表空間需要建立新的數(shù)據(jù)文件 commit后,數(shù)據(jù)不一定立即寫盤(數(shù)據(jù)文件) 一個事務(wù)即使不被提交,也會被寫入到重做日志中。
oracle server可以同時啟動多個數(shù)據(jù)庫 一套操作系統(tǒng)上可以安裝多個版本的oracle數(shù)據(jù)庫系統(tǒng)(unix可以,nt不可以) 一套oracle數(shù)據(jù)庫系統(tǒng)中可以有多個oracle數(shù)據(jù)庫及其相對應(yīng)的實例。
PL/SQL塊的命名和匿名 PL/SQL程序塊可以是一個命名的程序塊也可以是一個匿名程序塊。
匿名程序塊可以用在服務(wù)器端也可以用在客戶端。 命名程序塊可以出現(xiàn)在其他PL/SQL程序塊的聲明部分,這方面比較明顯的是子程序,子程序可以在執(zhí)行部分引用,也可以在異常處理部分引用。
PL/SQL程序塊可背獨立編譯并存儲在數(shù)據(jù)庫中,任何與數(shù)據(jù)庫相連接的應(yīng)用程序都可以訪問這些存儲的PL/SQL程序塊。ORACLE提供了四種類型的可存儲的程序: 。
函數(shù) 。 過程 。
包 。 觸發(fā)器 函數(shù) 函數(shù)是命名了的、存儲在數(shù)據(jù)庫中的PL/SQL程序塊。
函數(shù)接受零個或多個輸入?yún)?shù),有一個返回值,返回值的數(shù)據(jù)類型在創(chuàng)建函數(shù)時定義。定義函數(shù)的語法如下: FUNCTION name [{parameter[,parameter,。
])] RETURN datatypes IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers] END [name] 過程 存儲過程是一個PL/SQL程序塊,接受零個或多個參數(shù)作為輸入(INPUT)或輸出(OUTPUT)、或既作輸入又作輸出(INOUT),與函數(shù)不同,存儲過程沒有返回值,存儲過程不能由SQL語句直接使用,只能通過EXECUT命令或PL/SQL程序塊內(nèi)部調(diào)用,定義存儲過程的語法如下: PROCEDURE name [(parameter[,parameter,。 。
])] IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers ] END [name] 包(package) 包其實就是被組合在一起的相關(guān)對象的集合,當包中任何函數(shù)或存儲過程被調(diào)用,包就被加載入內(nèi)存中,包中的任何函數(shù)或存儲過程的子程序訪問速度將大大加快。
包由兩個部分組成:規(guī)范和包主體(body),規(guī)范描述變量、常量、游標、和子程序,包體完全定義子程序和游標。 觸發(fā)器(trigger) 觸發(fā)器與一個表或數(shù)據(jù)庫事件聯(lián)系在一起的,當一個觸發(fā)器事件發(fā)生時,定義在表上的觸發(fā)器被觸發(fā)。
變量和常量 變量存放在內(nèi)存中以獲得值,能被PL/SQL塊引用。 你可以把變量想象成一個可儲藏東西的容器,容器內(nèi)的東西是可以改變的。
聲明變量 變量一般都在PL/SQL塊的聲明部分聲明,PL/SQL是一種強壯的類型語言,這就是說在引用變量前必須首先聲明,要在執(zhí)行或異常處理部分使用變量,那么變量必須首先在聲明部分進行聲明。 聲明變量的語法如下: Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression] 注意:可以在聲明變量的同時給變量強制性的加上NOT NULL約束條件,此時變量在初始化時必須賦值。
給變量賦值 給變量賦值有兩種方式: 。 直接給變量賦值 X:=200; Y=Y+(X*20); 。
通過SQL SELECT INTO 或FETCH INTO給變量賦值 SELECT SUM(SALARY),SUM(SALARY*0。 1) INTO TOTAL_SALARY,TATAL_COMMISSION FROM EMPLOYEE WHERE DEPT=10; 常量 常量與變量相似,但常量的值在程序內(nèi)部不能改變,常量的值在定義時賦予,,他的聲明方式與變量相似,但必須包括關(guān)鍵字CONSTANT。
常量和變量都可被定義為SQL和用戶定義的數(shù)據(jù)類型。 ZERO_VALUE CONSTANT NUMBER:=0; 這個語句定了一個名叫ZERO_VALUE、數(shù)據(jù)類型是NUMBER、值為0的常量。
標量(scalar)數(shù)據(jù)類型 標量(scalar)數(shù)據(jù)類型沒有內(nèi)部組件,他們大致可分為以下四類: 。 numberWWW。
CN-MPA。COM 2005-8-16 3:17:43 。
character 。 date/time 。
boolean。
Oracle 基本知識輕松學: 1。
一個表空間只能屬于一個數(shù)據(jù)庫。 2。
每個數(shù)據(jù)庫最少有一個控制文件(建議3個,分別放在不同的磁盤上)。 3。
每個數(shù)據(jù)庫最少有一個表空間(SYSTEM表空間)。 4。
建立SYSTEM表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率,只應(yīng)存放數(shù)據(jù)字典。 5。
每個數(shù)據(jù)庫最少有兩個聯(lián)機日志組,每組最少一個聯(lián)機日志文件。 6。
一個數(shù)據(jù)文件只能屬于一個表空間。 7。
一個數(shù)據(jù)文件一旦被加入到一個表空間中,就不能再從這個表空間中移走,也不能再加入到其他表空間中。 8。
建立新的表空間需要建立新的數(shù)據(jù)文件。 9。
數(shù)據(jù)文件被ORACLE格式化為ORACLE塊,Oracle9i以前版本中,ORACLE塊的大小是在第一次創(chuàng)建數(shù)據(jù)庫時設(shè)定的。 10。
并且以后不能改變,要想改變,只能重建數(shù)據(jù)庫。 11。
一個段segment只能屬于一個表空間,但可以屬于多個數(shù)據(jù)文件。 12。
一個區(qū)extent只能屬于一個數(shù)據(jù)文件,即區(qū)間(extent)不能跨越數(shù)據(jù)文件。 13。
PCTFREE和PCTUSED總和不能大于等于100。 14。
單獨一個事務(wù)不能跨越多個回滾段。 15。
索引表不含ROWID值。 16。
擁有不同大小的回滾段沒有任何益處。 17。
COMMIT后,數(shù)據(jù)不一定立即寫盤(數(shù)據(jù)文件)。 18。
一個事務(wù)即使不被提交,也會被寫入到重做日志中。 19。
Oracle 8。0。
4中,在初始安裝時建立的缺省數(shù)據(jù)庫,實例名為ORCL 。 20。
一個塊的最大長度為16KB(有2K、4K、8K、16K)。 每個數(shù)據(jù)庫最大文件數(shù)(按塊大小) 2K塊 20000個文件 4K塊 40000個文件 8K塊或以上 65536個文件 21。
oracle server可以同時啟動多個數(shù)據(jù)庫 。 22。
一套操作系統(tǒng)上可以安裝多個版本的ORACLE數(shù)據(jù)庫系統(tǒng)(UNIX可以,NT不可以)。 23。
一套ORACLE數(shù)據(jù)庫系統(tǒng)中可以有多個ORACLE數(shù)據(jù)庫及其相對應(yīng)的實例 。 24。
每個ORACLE數(shù)據(jù)庫擁有一個數(shù)據(jù)庫實例(INSTANCE)(OPS除外)。 25。
所以,一套操作系統(tǒng)上同時可以有多個oracle數(shù)據(jù)庫實例啟動。
一個表空間只能屬于一個數(shù)據(jù)庫 每個數(shù)據(jù)庫最少有一個控制文件(建議3個,分別放在不同的磁盤上) 每個數(shù)據(jù)庫最少有一個表空間(SYSTEM表空間) 建立SYSTEM表空間的目的是盡量將目的相同的表存放在一起,以提高使用效率 每個數(shù)據(jù)庫最少有兩個聯(lián)機日志文件 一個數(shù)據(jù)文件只能屬于一個表空間 一個數(shù)據(jù)文件一旦被加入到一個表空間中,就不能再從這個表空間中移走,也不能再加入到其他表空間中建立新的表空間需要建立新的數(shù)據(jù)文件 數(shù)據(jù)文件被ORACLE格式化為ORACLE塊,ORACLE塊的大小是在第一次創(chuàng)建數(shù)據(jù)庫時設(shè)定的,并且以后不能改變 單獨一個事務(wù)不能跨越多個回滾段 索引表不含ROWID值 擁有不同大小的回滾段沒有任何益處 ORACLE在初始安裝時建立一個缺省數(shù)據(jù)庫,實例名為ORCL 一個塊的最大長度為16KB(有2K、4K、8K、16K) 每個數(shù)據(jù)庫最大文件數(shù)(按塊大小) 2K塊 20000個文件 4K塊 40000個文件 8K塊或以上 65536個文件 oracle server可以同時啟動多個數(shù)據(jù)庫 一套操作系統(tǒng)上只能安裝一個版本的ORACLE數(shù)據(jù)庫系統(tǒng) 一套ORACLE數(shù)據(jù)庫系統(tǒng)中可以有多個ORACLE數(shù)據(jù)庫 每個ORACLE數(shù)據(jù)庫擁有一個數(shù)據(jù)庫實例(INSTANCE) 所以,一套操作系統(tǒng)上同時可以有多個oracle數(shù)據(jù)庫實例啟動。
結(jié)構(gòu)化查詢語言(Structured Query Language,簡稱SQL)是用來訪問關(guān)系型數(shù)據(jù)庫一種通用語言,屬于第四代語言(4GL),其執(zhí)行特點是非過程化,即不用指明執(zhí)行的具體方法和途徑,而是簡單地調(diào)用相應(yīng)語句來直接取得結(jié)果即可。
顯然,這種不關(guān)注任何實現(xiàn)細節(jié)的語言對于開發(fā)者來說有著極大的便利。 然而,有些復雜的業(yè)務(wù)流程要求相應(yīng)的程序來描述,這種情況下4GL就有些無能為力了。
Oracle L/SQL的出現(xiàn)正是為了解決這一問題,Oracle PL/SQL是一種過程化語言,屬于第三代語言,它與C、C++、Java等語言一樣關(guān)注于處理細節(jié),可以用來實現(xiàn)比較復雜的業(yè)務(wù)邏輯。 一、編程基礎(chǔ)知識 1。
程序結(jié)構(gòu) Oracle PL/SQL程序都是以塊(block)為基本單位,整個Oracle PL/SQL塊分三部分:聲明部分(用declare開頭)、執(zhí)行部分(以 begin開頭)和異常處理部分(以exception開頭)。 其中執(zhí)行部分是必須的,其他兩個部分可選。
無論Oracle PL/SQL程序段的代碼量有多大,其基本結(jié)構(gòu)就是由這三部分組成。 2。
控制結(jié)構(gòu) Oracle PL/SQL程序段中有三種程序結(jié)構(gòu):條件結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和順序結(jié)構(gòu)。 1) 條件結(jié)構(gòu) 與其它語言完全類似,語法結(jié)構(gòu)如下: if condition then statement1 else statement2 end if ; 2)循環(huán)結(jié)構(gòu) 這一結(jié)構(gòu)與其他語言不太一樣,在PL/SQL程序中有三種循環(huán)結(jié)構(gòu): a。
loop … end loop; b。while condition loop … end loop; c。
for variable in low_bound 。 。
upper_bound loop … end loop; 其中的“…”代表循環(huán)體。 3)順序結(jié)構(gòu) 實際就是goto的運用,不過從程序控制的角度來看,盡量少用goto可以使得程序結(jié)構(gòu)更加的清晰。
聲明:本網(wǎng)站尊重并保護知識產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請在一個月內(nèi)通知我們,我們會及時刪除。
蜀ICP備2020033479號-4 Copyright ? 2016 學習鳥. 頁面生成時間:4.324秒