1.使用SELECT INTO 進行變量初始化:
DECLARE
v_average_cost VARCHAR2(10);
BEGIN
SELECT to_char(AVG(cost), '$9,999.99') INTO v_average_cost FROM course;
dbms_output.put_line('The average cost of a' ||
'course in the CTA program is' || v_average_cost);
END;
在簡單的PL/SQL語句塊中,數據定義語言(Data Definition Language,DDL)是無效的。(使用更高級的計時,諸如DBMS_SQL包中的過程就能夠使用DDL)。但是,通過變量,或者在PL/SQL語句塊中使用DML語句,就可以非常容易實現DML操作。
DECLARE
v_city zipcode.city%TYPE;
BEGIN
SELECT 'COLUMBUS' INTO v_city FROM dual;
UPDATE zipcode SET city = v_city WHERE zip = 43224;
END;
也可以在PL/SQL語句塊中往數據庫中插入數據,
DECLARE
v_zip zipcode.zip%TYPE;
v_user zipcode.created_by%TYPE;
v_date zipcode.created_date%TYPE;
BEGIN
SELECT 43438, USER, SYSDATE INTO v_zip, v_user, v_date FROM dual;
INSERT INTO zipcode
(zip, created_by, created_date, modified_by, modified_date)
VALUES
(v_zip, v_user, v_date, v_user, v_date);
END;
2.在PLSQL語句塊中使用DML
編寫一個PLSQL語句塊,向student表中插入一條新的學生記錄。
DECLARE
v_max_id NUMBER;
BEGIN
SELECT MAX(student_id) INTO v_max_id FROM student;
INSERT INTO student
(student_id,
last_name,
zip,
created_by,
created_date,
modified_by,
modified_date,
registration_date)
VALUES
(v_max_id,
'Rosenzweig',
11238,
'BROSENZ',
'01-JAN-99',
'BROSENZ',
'01-JAN-99',
'01-JAN-99');
END;
在PLSQL語句塊中使用序列:
DECLARE
v_user student.created_by%TYPE;
v_date student.created_date%TYPE;
BEGIN
SELECT USER, SYSDATE INTO v_user, v_date FROM dual;
INSERT INTO student
(student_id,
last_name,
zip,
created_by,
created_date,
modified_by,
modified_date,
registration_date)
VALUES
(student_id_seq.nextval,
'Smith',
11238,
v_user,
v_date,
v_user,
v_date,
v_date);
END;
在PLSQL語句塊中使用COMMIT,ROLLBACK和SAVEPOINT
BEGIN
INSERT INTO student
(student_id,
last_name,
zip,
registration_date,
created_by,
created_date,
modified_by,
modified_date)
VALUES
(student_id_seq.nextval,
'Tashi',
10015,
'01-JAN-99',
'STUDENTA',
'01-JAN-99',
'STUDENTA',
'01-JAN-99');
SAVEPOINT a;
INSERT INTO student
(student_id,
last_name,
zip,
registration_date,
created_by,
created_date,
modified_by,
modified_date)
VALUES
(student_id_seq.nextval,
'Sonam',
10015,
'01-JAN-99',
'STUDENTB',
'01-JAN-99',
'STUDENTB',
'01-JAN-99');
SAVEPOINT b;
INSERT INTO student
(student_id,
last_name,
zip,
registration_date,
created_by,
created_date,
modified_by,
modified_date)
VALUES
(student_id_seq.nextval,
'Norbu',
10015,
'01-JAN-99',
'STUDENTB',
'01-JAN-99',
'STUDENTB',
'01-JAN-99');
SAVEPOINT c;
ROLLBACK TO b;
END;
單個PLSQL包含多個事務:
DECLARE
v_counter NUMBER;
BEGIN
v_counter := 0;
FOR i IN 1 .. 100
LOOP
v_counter := v_counter + 1;
IF v_counter = 10
THEN
COMMIT;
v_counter := 0;
END IF;
END LOOP;
END;