Pl/sql基礎知識:
(1)pl/sql的塊結構
(2)變量的聲明
(3)字符值,字符和保留字
(4)pl/sql語言使用的數據類型
(5)隱藏代碼的Wrpper實用程序
了解:
DDL:data definition language的縮寫 包括:alter,create,drop,truncate,grant,revoke
DML:data manipulation language的縮寫 包括:insert update delete
目前:oracle10g存儲的數據量可以達到EB級,1EB=1024PB,1PB=1024TB,1TB=1024G,1G=1024M,1M=1024KB,1KB=1024B 1B=8b
pl/sql的數據類型:
標量類型:字符/字符串類型,數字類型,布爾類型,日期/時間類型
引用類型:ref cursor(游標變量),ref(可以理解為一個指針,只是該指針指向的內容是對象表,或對象視圖里的一個對象實例)
復合類型:記錄,嵌套表,index-by表,varrays
LOB大對象類型:oracle 10前可以存儲小于4G的二進制或字符數據,oracle 10可以存儲最大長度是:8T-128T
代碼塊的基本結構:
begin
null;--如果沒有null會出現異常
end
----------------------
--匿名塊的實例:
CREATE TABLE authors (
id NUMBER PRIMARY KEY,
first_name VARCHAR2(50),
last_name VARCHAR2(50)
);
CREATE TABLE books (
isbn CHAR(10) PRIMARY KEY,
category VARCHAR2(20),
title VARCHAR2(100),
num_pages NUMBER,
price NUMBER,
copyright NUMBER(4),
author1 NUMBER CONSTRAINT books_author1
REFERENCES authors(id),
author2 NUMBER CONSTRAINT books_author2
REFERENCES authors(id),
author3 NUMBER CONSTRAINT books_author3
REFERENCES authors(id)
);
CREATE TABLE inventory (
isbn CHAR(10) CONSTRAINT fk_isbn REFERENCES books (isbn),
status VARCHAR2(25) CHECK (status IN ('IN STOCK', 'BACKORDERED', 'FUTURE')),
status_date DATE,
amount NUMBER
);
INSERT INTO authors (id, first_name, last_name)
VALUES (1, 'Marlene', 'Theriault');
INSERT INTO authors (id, first_name, last_name)
VALUES (2, 'Rachel', 'Carmichael');
INSERT INTO authors (id, first_name, last_name)
VALUES (3, 'James', 'Viscusi');
INSERT INTO books (isbn, category, title, num_pages, price, copyright, author1, author2, author3)
VALUES ('72121203', 'Oracle Basics', 'Oracle DBA 101', 563, 39.99, 1999, 1, 2, 3);
INSERT INTO inventory (isbn, status, status_date, amount)
VALUES ('72121203', 'BACKORDERED', TO_DATE('06-JUN-2004', 'DD-MON-YYYY'), 1000);
SET SERVEROUTPUT ON ESCAPE OFF--當退出該匿名塊時就關閉SERVEROUTPUT
DECLARE
v_first_name authors.first_name%TYPE; --聲明和定義變量
v_last_name authors.last_name%TYPE;
v_row_count PLS_INTEGER := 0;
CURSOR auth_cur IS --聲明游標
SELECT a.first_name, a.last_name, count(b.title)
FROM authors a, books b
WHERE a.id = b.author1
OR a.id = b.author2
OR a.id = b.author3
GROUP BY a.first_name, a.last_name
HAVING count(b.title) > 0
ORDER BY a.last_name;
BEGIN
DBMS_OUTPUT.ENABLE(1000000);
OPEN auth_cur; --打開游標
LOOP
FETCH auth_cur INTO v_first_name, v_last_name, v_row_count;--推進游標
EXIT WHEN auth_cur%NOTFOUND; --當沒有發現數據時,推出
DBMS_OUTPUT.PUT_LINE(v_last_name
||', '
||v_first_name
||' wrote '
||v_row_count
||' book(s).');
END LOOP;
CLOSE auth_cur; --關閉游標
EXCEPTION --異常處理部分
WHEN OTHERS --others表示其它別的異常
THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;