ORACLE PL/SQL程式設計詳解
ORACLE PL/SQL程式設計詳解
SQL語言只是訪問、操作資料庫的語言,並不是一種具有流程控制的程式設計語言,而只有程式設計語言才能用於應用軟體的開發。PL /SQL是一種高階資料庫程式設計語言,該語言專門用於在各種環境下對ORACLE資料庫進行訪問。由於該語言集成於資料庫伺服器中,所以PL/SQL程式碼可以對資料進行快速高效的處理。除此之外,可以在ORACLE資料庫的某些客戶端工具中,使用PL/SQL語言也是該語言的一個特點。本章的主要內容是討論引入PL/SQL語言的必要性和該語言的主要特點,以及瞭解PL/SQL語言的重要性和資料庫版本問題。還要介紹一些貫穿全書的更詳細的高階概念,並在本章的最後就我們在本書案例中使用的資料庫表的若干約定做一說明。
1.1 SQL與PL/SQL
1.1.1 什麼是PL/SQL?
PL/SQL是 Procedure Language & Structured Query Language 的縮寫。ORACLE的SQL是支援ANSI(American national Standards Institute)和ISO92 (International Standards Organization)標準的產品。PL/SQL是對SQL語言儲存過程語言的擴充套件。從ORACLE6以後,ORACLE的RDBMS附帶了PL/SQL。它現在已經成為一種過程處理語言,簡稱PL/SQL。目前的PL/SQL包括兩部分,一部分是資料庫引擎部分;另一部分是可嵌入到許多產品(如C語言,JAVA語言等)工具中的獨立引擎。可以將這兩部分稱為:資料庫PL/SQL和工具PL/SQL。兩者的程式設計非常相似。都具有程式設計結構、語法和邏輯機制。工具PL/SQL另外還增加了用於支援工具(如ORACLE Forms)的句法,如:在窗體上設定按鈕等。本章主要介紹資料庫PL/SQL內容。
1.2 PL/SQL的優點或特徵
1.2.1 有利於客戶/伺服器環境應用的執行
對於客戶/伺服器環境來說,真正的瓶頸是網路上。無論網路多快,只要客戶端與伺服器進行大量的資料交換。應用執行的效率自然就回受到影響。如果使用PL/SQL進行程式設計,將這種具有大量資料處理的應用放在伺服器端來執行。自然就省去了資料在網上的傳輸時間。
1.2.2 適合於客戶環境
PL/SQL由於分為資料庫PL/SQL部分和工具PL/SQL。對於客戶端來說,PL/SQL可以巢狀到相應的工具中,客戶端程式可以執行本地包含PL/SQL部分,也可以向服務發SQL命令或啟用伺服器端的PL/SQL程式執行。
1.2.3過程化
PL/SQL是Oracle在標準SQL上的過程性擴充套件,不僅允許在PL/SQL程式內嵌入SQL語句,而且允許使用各種型別的條件分支語句和迴圈語句,可以多個應用程式之間共享其解決方案。
1.2.4模組化
PL/SQL程式結構是一種描述性很強、界限分明的塊結構、巢狀塊結構,被分成單獨的過程、函式、觸發器,且可以把它們組合為程式包,提高程式的模組化能力。
1.2.5 執行錯誤的可處理性
使用PL/SQL提供的異常處理(EXCEPTION),開發人員可集中處理各種ORACLE錯誤和PL/SQL錯誤,或處理系統錯誤與自定義錯誤,以增強應用程式的健壯性。
1.2.6 提供大量內建程式包
ORACLE提供了大量的內建程式包。通過這些程式包能夠實現DBS的一些低層操作、高階功能,不論對DBA還是應用開發人員都具有重要作用。
當然還有其它的一些優點如:更好的效能、可移植性和相容性、可維護性、易用性與快速性等。
1.3 PL/SQL 可用的SQL語句
PL/SQL是ORACLE系統的核心語言,現在ORACLE的許多部件都是由PL/SQL寫成。在PL/SQL中可以使用的SQL語句有:
INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。
提示:在 PL/SQL中只能用 SQL語句中的 DML 部分,不能用 DDL 部分,如果要在PL/SQL中使用DDL(如CREATE table 等)的話,只能以動態的方式來使用。
l ORACLE 的 PL/SQL 元件在對 PL/SQL 程式進行解釋時,同時對在其所使用的表名、列名及資料型別進行檢查。
l PL/SQL 可以在SQL*PLUS 中使用。
l PL/SQL 可以在高階語言中使用。
l PL/SQL可以在ORACLE的開發工具中使用(如:SQL Developer或Procedure Builder等)。
l 其它開發工具也可以呼叫PL/SQL編寫的過程和函式,如Power Builder 等都可以呼叫伺服器端的PL/SQL過程。
1.4 執行PL/SQL程式
PL/SQL程式的執行是通過ORACLE中的一個引擎來進行的。這個引擎可能在ORACLE的伺服器端,也可能在 ORACLE 應用開發的客戶端。引擎執行PL/SQL中的過程性語句,然後將SQL語句傳送給資料庫伺服器來執行。再將結果返回給執行端
2.1 PL/SQL塊
PL/SQL程式由三個塊組成,即宣告部分、執行部分、異常處理部分。
PL/SQL塊的結構如下:
DECLARE--宣告部分: 在此宣告PL/SQL用到的變數,型別及遊標,以及區域性的儲存過程和函式BEGIN-- 執行部分: 過程及SQL 語句 , 即程式的主要部分 EXCEPTION-- 執行異常部分: 錯誤處理END; |
其中:執行部分不能省略。
PL/SQL塊可以分為三類:
1. 無名塊或匿名塊(anonymous):動態構造,只能執行一次,可呼叫其它程式,但不能被其它程式呼叫。
2. 命名塊(named):是帶有名稱的匿名塊,這個名稱就是標籤。
3. 子程式(subprogram):儲存在資料庫中的儲存過程、函式等。當在資料庫上建立好後可以在其它程式中呼叫它們。
4. 觸發器 (Trigger):當資料庫發生操作時,會觸發一些事件,從而自動執行相應的程式。
5. 程式包(package):儲存在資料庫中的一組子程式、變數定義。在包中的子程式可以被其它程式包或子程式呼叫。但如果宣告的是區域性子程式,則只能在定義該區域性子程式的塊中呼叫該區域性子程式。
2.2 PL/SQL結構
l PL/SQL塊中可以包含子塊;
l 子塊可以位於 PL/SQL中的任何部分;
l 子塊也即PL/SQL中的一條命令;
2.3 識別符號
PL/SQL程式設計中的識別符號定義與SQL 的識別符號定義的要求相同。要求和限制有:
l 識別符號名不能超過30字元;
l 第一個字元必須為字母;
l 不分大小寫;
l 不能用’-‘(減號);
l 不能是SQL保留字。
提示: 一般不要把變數名宣告與表中欄位名完全一樣,如果這樣可能得到不正確的結果.
例如:下面的例子將會刪除所有的紀錄,而不是’EricHu’的記錄;
DECLARE ename varchar2(20) :='EricHu';BEGINDELETEFROM scott.emp WHERE ename=ename;END; |
變數命名在PL/SQL中有特別的講究,建議在系統的設計階段就要求所有程式設計人員共同遵守一定的要求,使得整個系統的文件在規範上達到要求。下面是建議的命名方法:
識別符號 |
命名規則 |
例子 |
程式變數 |
V_name |
V_name |
程式常量 |
C_Name |
C_company_name |
遊標變數 |
Cursor_Name |
Cursor_Emp |
異常標識 |
E_name |
E_too_many |
表型別 |
Name_table_type |
Emp_record_type |
表 |
Name_table |
Emp |
記錄型別 |
Name_record |
Emp_record |
SQL*Plus 替代變數 |
P_name |
P_sal |
繫結變數 |
G_name |
G_year_sal |
2.4 PL/SQL 變數型別
在前面的介紹中,有系統的資料型別,也可以自定義資料型別。下表給出ORACLE型別和PL/SQL中的變數型別的合法使用列表:
2.4.1 變數型別
在ORACLE8i中可以使用的變數型別有:
型別 |
子類 |
說明 |
範圍 |
ORACLE限制 |
CHAR |
Character String Rowid Nchar |
定長字串 民族語言字符集 |
0à32767 可選,確省=1 |
2000 |
VARCHAR2 |
Varchar, String NVARCHAR2 |
可變字串 民族語言字符集 |
0à32767 4000 |
4000 |
BINARY_INTEGER |
帶符號整數,為整數計算優化效能 |
|||
NUMBER(p,s) |
Dec Double precision Integer Int Numeric Real Small int |
小數, NUMBER 的子型別 高精度實數 整數, NUMBER 的子型別 整數, NUMBER 的子型別 與NUMBER等價 與NUMBER等價 整數, 比 integer 小 |
||
LONG |
變長字串 |
0->2147483647 |
32,767位元組 |
|
DATE |
日期型 |
公元前4712年1月1日至公元后4712年12月31日 |
||
BOOLEAN |
布林型 |
TRUE, FALSE,NULL |
不使用 |
|
ROWID |
存放資料庫行號 |
|||
UROWID |
通用行識別符號,字元型別 |
例1. 插入一條記錄並顯示;
DECLARE Row_id ROWID; info VARCHAR2(40);BEGININSERTINTO scott.dept VALUES (90, '財務室', '海口') RETURNING rowid, dname||':'||to_char(deptno)||':'||locINTO row_id, info; DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id); DBMS_OUTPUT.PUT_LINE(info);END; |
其中:
RETURNING子句用於檢索INSERT語句中所影響的資料行數,當INSERT語句使用VALUES 子句插入資料時,RETURNING 字句還可將列表達式、ROWID和REF值返回到輸出變數中。在使用RETURNING 子句是應注意以下幾點限制:
1.不能與DML語句和遠端物件一起使用;
2.不能檢索LONG 型別資訊;
3.當通過檢視向基表中插入資料時,只能與單基表檢視一起使用。
例2. 修改一條記錄並顯示
DECLARE Row_id ROWID; info VARCHAR2(40);BEGINUPDATE dept SET deptno=100WHERE DNAME='財務室' RETURNING rowid, dname||':'||to_char(deptno)||':'||locINTO row_id, info; DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id); DBMS_OUTPUT.PUT_LINE(info);END; |
其中:
RETURNING子句用於檢索被修改行的資訊。當UPDATE語句修改單行資料時,RETURNING 子句可以檢索被修改行的ROWID和REF值,以及行中被修改列的列表達式,並可將他們儲存到PL/SQL變數或複合變數中;當UPDATE語句修改多行資料時,RETURNING 子句可以將被修改行的ROWID和REF值,以及列表達式值返回到複合變數陣列中。在UPDATE中使用RETURNING 子句的限制與INSERT語句中對RETURNING子句的限制相同。
例3. 刪除一條記錄並顯示
DECLARE Row_id ROWID; info VARCHAR2(40);BEGINDELETE dept WHERE DNAME='辦公室' RETURNING rowid, dname||':'||to_char(deptno)||':'||locINTO row_id, info; DBMS_OUTPUT.PUT_LINE('ROWID:'||row_id); DBMS_OUTPUT.PUT_LINE(info);END; |
其中:
RETURNING子句用於檢索被刪除行的資訊:當DELETE語句刪除單行資料時,RETURNING 子句可以檢索被刪除行的ROWID和REF值,以及被刪除列的列表達式,並可將他們儲存到PL/SQL變數或複合變數中;當DELETE語句刪除多行資料時,RETURNING 子句可以將被刪除行的ROWID和REF值,以及列表達式值返回到複合變數陣列中。在DELETE中使用RETURNING 子句的限制與INSERT語句中對RETURNING子句的限制相同。
2.4.2 複合型別
ORACLE 在 PL/SQL 中除了提供象前面介紹的各種型別外,還提供一種稱為複合型別的型別---記錄和表.
2.4.2.1 記錄型別
記錄型別類似於C語言中的結構資料型別,它把邏輯相關的、分離的、基本資料型別的變數組成一個整體儲存起來,它必須包括至少一個標量型或RECORD 資料型別的成員,稱作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但邏輯相關的資訊。在使用記錄資料型別變數時,需要先在宣告部分先定義記錄的組成、記錄的變數,然後在執行部分引用該記錄變數本身或其中的成員。
定義記錄型別語法如下:
TYPE record_name IS RECORD( v1 data_type1 [NOT NULL][:= default_value ], v2 data_type2 [NOT NULL][:= default_value ], ...... vn data_typen [NOT NULL][:= default_value ] ); |
例4 :
DECLARE TYPE test_rec IS RECORD( Name VARCHAR2(30) NOTNULL :='胡勇', Info VARCHAR2(100)); rec_book test_rec;BEGIN rec_book.Name :='胡勇'; rec_book.Info :='談PL/SQL程式設計;'; DBMS_OUTPUT.PUT_LINE(rec_book.Name||' '||rec_book.Info);END; |
可以用 SELECT語句對記錄變數進行賦值,只要保證記錄欄位與查詢結果列表中的欄位相配即可。
例5 :
DECLARE--定義與hr.employees表中的這幾個列相同的記錄資料型別 TYPE RECORD_TYPE_EMPLOYEES IS RECORD( f_name hr.employees.first_name%TYPE, h_date hr.employees.hire_date%TYPE, j_id hr.employees.job_id%TYPE);--宣告一個該記錄資料型別的記錄變數 v_emp_record RECORD_TYPE_EMPLOYEES;BEGINSELECT first_name, hire_date, job_id INTO v_emp_recordFROM employeesWHERE employee_id =&emp_id; DBMS_OUTPUT.PUT_LINE('僱員名稱:'||v_emp_record.f_name||' 僱傭日期:'||v_emp_record.h_date||' 崗位:'||v_emp_record.j_id);END; |
一個記錄型別的變數只能儲存從資料庫中查詢出的一行記錄,若查詢出了多行記錄,就會出現錯誤。
2.4.2.2 陣列型別
資料是具有相同資料型別的一組成員的集合。每個成員都有一個唯一的下標,它取決於成員在陣列中的位置。在PL/SQL中,陣列資料型別是VARRAY。
定義VARRY資料型別語法如下:
TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL]; |
varray_name是VARRAY資料型別的名稱,size是下整數,表示可容納的成員的最大數量,每個成員的資料型別是element_type。預設成員可以取空值,否則需要使用NOT NULL加以限制。對於VARRAY資料型別來說,必須經過三個步驟,分別是:
定義、宣告、初始化。
例6 :
DECLARE--定義一個最多儲存5個VARCHAR(25)資料型別成員的VARRAY資料型別 TYPE reg_varray_type IS VARRAY(5) OFVARCHAR(25);--宣告一個該VARRAY資料型別的變數 v_reg_varray REG_VARRAY_TYPE;BEGIN--用建構函式語法賦予初值 v_reg_varray := reg_varray_type ('中國', '美國', '英國', '日本', '法國'); DBMS_OUTPUT.PUT_LINE('地區名稱:'||v_reg_varray(1)||'、'||v_reg_varray(2)||'、'||v_reg_varray(3)||'、'||v_reg_varray(4)); DBMS_OUTPUT.PUT_LINE('賦予初值NULL的第5個成員的值:'||v_reg_varray(5));--用建構函式語法賦予初值後就可以這樣對成員賦值 v_reg_varray(5) :='法國'; DBMS_OUTPUT.PUT_LINE('第5個成員的值:'||v_reg_varray(5));END; |
2.4.2.3 使用%TYPE
定義一個變數,其資料型別與已經定義的某個資料變數(尤其是表的某一列)的資料型別相一致,這時可以使用%TYPE。
使用%TYPE特性的優點在於:
l所引用的資料庫列的資料型別可以不必知道;
l所引用的資料庫列的資料型別可以實時改變,容易保持一致,也不用修改PL/SQL程式。
例7:
DECLARE-- 用%TYPE 型別定義與表相配的欄位 TYPE T_Record IS RECORD( T_no emp.empno%TYPE, T_name emp.ename%TYPE, T_sal emp.sal%TYPE );-- 宣告接收資料的變數 v_emp T_Record;BEGINSELECT empno, ename, sal INTO v_emp FROM emp WHERE empno=7788; DBMS_OUTPUT.PUT_LINE (TO_CHAR(v_emp.t_no)||' '||v_emp.t_name||' '|| TO_CHAR(v_emp.t_sal));END; |
例8:
DECLARE v_empno emp.empno%TYPE :=&no; Type t_record is record ( v_name emp.ename%TYPE, v_sal emp.sal%TYPE, v_date emp.hiredate%TYPE); Rec t_record;BEGINSELECT ename, sal, hiredate INTO Rec FROM emp WHERE empno=v_empno; DBMS_OUTPUT.PUT_LINE(Rec.v_name||'---'||Rec.v_sal||'--'||Rec.v_date);END; |
2.4.3 使用%ROWTYPE
PL/SQL 提供%ROWTYPE操作符, 返回一個記錄型別, 其資料型別和資料庫表的資料結構相一致。
使用%ROWTYPE特性的優點在於:
l所引用的資料庫中列的個數和資料型別可以不必知道;
l所引用的資料庫中列的個數和資料型別可以實時改變,容易保持一致,也不用修改PL/SQL程式。
例9:
DECLARE v_empno emp.empno%TYPE :=&no; rec emp%ROWTYPE;BEGINSELECT*INTO rec FROM emp WHERE empno=v_empno; DBMS_OUTPUT.PUT_LINE('姓名:'||rec.ename||'工資:'||rec.sal||'工作時間:'||rec.hiredate); END; |
2.4.4 LOB型別
ORACLE提供了LOB (Large OBject)型別,用於儲存大的資料物件的型別。ORACLE目前主要支援BFILE, BLOB, CLOB 及 NCLOB 型別。
BFILE (Movie)
存放大的二進位制資料物件,這些資料檔案不放在資料庫裡,而是放在作業系統的某個目錄裡,資料庫的表裡只存放檔案的目錄。
BLOB(Photo)
儲存大的二進位制資料型別。變數儲存大的二進位制物件的位置。大二進位制物件的大小<=4GB。
CLOB(Book)
儲存大的字元資料型別。每個變數儲存大字元物件的位置,該位置指到大字元資料塊。大字元物件的大小<=4GB。
NCLOB
儲存大的NCHAR字元資料型別。每個變數儲存大字元物件的位置,該位置指到大字元資料塊。大字元物件的大小<=4GB。
2.4.5 BIND 變數
繫結變數是在主機環境中定義的變數。在PL/SQL 程式中可以使用繫結變數作為他們將要使用的其它變數。為了在PL/SQL 環境中宣告繫結變數,使用命令VARIABLE。
例如:
VARIABLE return_code NUMBERVARIABLE return_msg VARCHAR2(20) |
可以通過SQL*Plus命令中的PRINT 顯示繫結變數的值。例如:
PRINT return_codePRINT return_msg |
例10:
VARIABLE result NUMBER;BEGINSELECT (sal*10)+nvl(comm, 0) INTO :result FROM emp WHERE empno=7844;END;--然後再執行PRINT result |
2.4.6 PL/SQL 表(TABLE)
定義記錄表(或索引表)資料型別。它與記錄型別相似,但它是對記錄型別的擴充套件。它可以處理多行記錄,類似於高階中的二維陣列,使得可以在PL/SQL中模仿資料庫中的表。
定義記錄表型別的語法如下:
TYPE table_name ISTABLEOF element_type [NOT NULL]INDEXBY[BINARY_INTEGER | PLS_INTEGER | VARRAY2]; |
關鍵字INDEX BY表示建立一個主鍵索引,以便引用記錄表變數中的特定行。
方法 |
描述 |
EXISTS(n) |
如果集合的第n個成員存在,則返回true |
COUNT |
返回已經分配了儲存空間即賦值了的成員數量 |
FIRST LAST |
FIRST:返回成員的最低下標值 LAST: 返回成員的最高下標值 |
PRIOR(n) |
返回下標為n的成員的前一個成員的下標。如果沒有則返回NULL |
NEXT(N) |
返回下標為n的成員的後一個成員的下標。如果沒有則返回NULL |
TRIM |
TRIM:刪除末尾一個成員 TRIM(n) :刪除末尾n個成員 |
DELETE |
DELETE:刪除所有成員 DELETE(n) :刪除第n個成員 DELETE(m, n) :刪除從n到m的成員 |
EXTEND |
EXTEND:新增一個null成員 EXTEND(n):新增n個null成員 EXTEND(n,i):新增n個成員,其值與第i個成員相同 |
LIMIT |
返回在varray型別變數中出現的最高下標值 |
例11:
DECLARE TYPE dept_table_type ISTABLEOF dept%ROWTYPE INDEXBY BINARY_INTEGER; my_dname_table dept_table_type; v_count number(2) :=4;BEGINFORintIN1 .. v_count LOOPSELECT*INTO my_dname_table(int) FROM dept WHERE deptno=int*10;END LOOP;FORintIN my_dname_table.FIRST .. my_dname_table.LAST LOOP DBMS_OUTPUT.PUT_LINE('Department number: '||my_dname_table(int).deptno); DBMS_OUTPUT.PUT_LINE('Department name: '|| my_dname_table(int).dname);END LOOP;END; |
例12:按一維陣列使用記錄表
DECLARE
DECLARE
v_first_name employees.first_name%TYPE;
v_job_id employees.job_id%TYPE;
v_salary employees.salary%TYPE;
v_sal_raise NUMBER(3,2);
B
ORACLE PL/SQL程式設計詳解
SQL語言只是訪問、操作資料庫的語言,並不是一種具有流程控制的程式設計語言,而只有程式設計語言才能用於應用軟體的開發。PL /SQL是一種高階資料庫程式設計語言,該語言專門用於在各種環境下對ORACLE資料庫進行訪問。由於該語言集成於資料庫伺服器中,所以PL/SQ
本篇主要內容如下:
6.1 引言
6.2 建立函式
6.3 儲存過程
6.3.1 建立過程
6.3.2 呼叫儲存過程
6.3.3 AUTHID
6.3.4 PRAGMA AUTONOMOUS_TRANSACTION
6.3.5 開發儲存過程步驟
6.3.6
識別符號的規範
1、定義變數,用v_作為字首
2、定義常量,用c_作為字首
3、定義遊標,用_cursor作為字尾
4、定義列外,用e_作為字首
塊(block)
PL\SQL的程式基本單元
編寫PL\SQL程式,其實就是在編寫PL\SQL塊,要完成相對簡單的功能 如果儲存過程名已經被佔用,兩種方式:1.修改儲存過程名;2新增關鍵字 or replace :表示如果有yao_prol,就替換。eg:SQL> create or replace procedure yao_prol is 2 begin 3 insert into YAO_T SQL_TEXT:SQL文字的前1000個字元SHARABLE_MEM:佔用的共享記憶體大小(單位:byte)PERSISTENT_MEM:生命期內的固定記憶體大小(單位:byte)RUNTIME_MEM:執行期內的固定記憶體大小SORTS:完成的排序數LOADED_VERSIONS:顯示上下文堆是否載入,1
PL/SQL塊基本結構
declare
<declarations section> -- 宣告部分
begin
<executable command(s)> -- 執行部分
exception
<exception handling> -
DECLARE
DeptRec DEPARTMENTS%ROWTYPE;
Dept_name DEPARTMENTS.DEPARTMENT_NAME%TYPE;
Dept_loc DEPARTMENTS.LOCATION_ID%TYPE;
CURSOR c1 ISSEL PL/SQL高階程式設計實驗目的: 1、掌握PL/SQL的資料結構和程式設計結構,掌握應用PL/SQL編寫簡單程式的方法 2、理解儲存過程的概念,掌握編寫儲存過程的方法 3、理解函式的概念,掌握編寫儲存過程的方法實驗內容:一、PL/SQL程式設計基礎1、pl/sql的組成:宣告塊、執行塊、異常處理塊2、編制程 PL/SQL塊基本結構
declare
<declarations section> -- 宣告部分
begin
<executable command(s)> -- 執行部分
exception
<exception handling> -- 異常處理部分
包過載
包過載實際上就是對包中的子程式的過載,之前我們已經對子程式的過載做過介紹,這裡簡單看下程式碼。
定義包規範:
CREATE OR REPLACE PACKAGE emp_action_pkg_overload IS
--定義一個增加新員工
理解動態SQL語句
動態SQL語句基礎
動態SQL語句不僅是指SQL語句是動態拼接而成的,更主要的是SQL語句所使用的物件也是執行時期才建立的。出現這種功能跟PL/SQL本身的早起繫結特性有關,早PL/SQL中,所有的物件必須已經存在於資料庫中才能執行, Oracle.DataAccess.Client.OracleConnection oracleConnection1=new OracleConnection("data source=precolm2;user id=colmtest;password=colmtest"); 管理索引-原理介紹
介紹n
索引是用於加速資料存取的資料物件。合理的使用索引可以大大降低i/o次數,從而提高資料訪問效能。索引有很多種我們主要介紹常用的幾種:
為什麼添加了索引後,會加快查詢速度呢?
建立索引
單列索引n
單列索引是基於單個列所建立的索引,比如:
creat
PL/SQl基本結構
PL/SQL資料型別
數字型別:NUMBER(P,S)、PLS_INTEGER、BINARY_INTEGER
字元型別:CHAR、NCHAR、VARCHAR2、NVARCHAR2、LONG
日期型別:DATE
1.pl/sql程式設計
pl/sql 指procedure language 過程化/sql.
pl/sql 是oracle在標準的sql語句基礎上擴充套件的一種對oracle資料庫進行程式設計的的語言。
可以定義變數和常量,而且可以使用條件語句和迴圈語句。
2.為什麼要有pl/sql程式設計?
平時是通過 後臺數據庫 管理工具 下載地址 oracle 客戶端 對於傳統的使用關系型數據庫的大型軟件產品,後臺數據庫的持續開發和維護可能會產生大量的腳本文件,針對這些腳本文件應該怎樣比較方便的進行版本管理,以及如何快捷的在團隊之間進行權限等協作管理呢?不同的數據庫產品以及相應的客戶端管理工具與不同產 pan 查詢 寫入 所有 not insert語句 int 寫入文件 文件系統 一、概述
hive不支持用insert語句一條一條的進行插入操作,也不支持update操作。數據是以load的方式加載到建立好的表中。數據一旦導入就不可以修改。
DML包括:INSERT插入 blank 可用 htm post alt lock tables span 重新
一、建立表時候,註意PCTFREE參數的作用
PCTFREE:為一個塊保留的空間百分比,表示數據塊在什麽情況下可以被insert,默認是10,表示當數據塊的可用空間低於 tips pub erro date name and 結構 lean comm PL/SQL 的包1.邏輯相關的組件的組合 (變量,數據結構,異常,存儲過程,函數)2.組成 : 定義 和 包體
-- 組成包頭 : PUBLIC 包體 : PRIVATE
-- 包頭的 |