DECLARE
v_name varchar2(10);
BEGIN
SELECT t.name INTO v_name FROM emp t WHERE t.id = &id;
dbms_output.put_line('名字是:' || v_name);
END;
3. 命名块:有名字(标示)的pl/sql,块前使用《》加以标示
<<block1>>
DECLARE
v_name varchar2(10);
v_age number(4);
BEGIN
<<block2>>
BEGIN
SELECT t.name INTO v_name FROM emp t WHERE t.id = &id;
dbms_output.put_line('名字是:' || v_name);
END;
SELECT t.age INTO v_age FROM emp t WHERE t.name = v_name;
dbms_output.put_line('年龄:' || v_age);
END;
CREATE FUNCTION test_function(name VARCHAR2, age NUMBER) RETURN VARCHAR2 IS
v_addr VARCHAR2(100);
BEGIN
SELECT '中国.山东' || t.addr
INTO v_addr
FROM emp t
WHERE t.name = name
and t.age = age;
RETURN v_addr;
END;
-- 包规范知识定义了一个存储过程和函数而没有实现代码
CREATE PACKAGE test_pkg IS
PROCEDURE test_procedure(name VARCHAR2, age NUMBER);
FUNCTION test_function(name VARCHAR2, age NUMBER) RETURN NUMBER;
END;
包体:
CREATE PACKAGE BODY test_pkg IS
PROCEDURE test_procedure(name VARCHAR2, age NUMBER) IS
BEGIN
UPDATE emp t set t.name = name WHERE t.age = age;
END;
FUNCTION test_function(name VARCHAR2, age NUMBER) RETURN NUMBER IS
v_slary NUMBER(4, 1);
BEGIN
SELECT t.slary
INTO v_slary
WHERE t.name = name
and t.age = age;
RETURN NUMBER v_slary;
END;
END;
-- 当更新dept表中的d_name列时更新emp表中的d_name列
CREATE TRIGGER test_trigger
AFTER UPDATE OF d_name ON dept
FOR EACH ROW
BEGIN
UPDATE emp t SET t.d_name = :new.d_name WHERE t.d_name = o :d_name;
END;
DECLARE
TYPE test_type_emp IS RECORD(
v_name emp.name%TYPE,
v_age emp.age%Type);
v_r_emp test_type_emp; -- 定义一个record变量test_type_emp
BEGIN
SELECT name, age INTO v_r_emp FROM emp WHERE emp.id = '45';
dbms_output.put_line('名字是:' || v_r_emp.v_name);
END;
CREATE OR REPLACE TYPE test_emp_type AS OBJECT
(
name varchar2(10),
age number
)
;
CREATE OR REPLACE TYPE emp_array IS VARRY(10) OF test_emp_type;
CREATE TABLE hoom(
hname varchar2(100);
vemp emp_array
)
DECLARE
TYPE c1 IS REF CURSOR;
emp_cursor c1;
v_name emp.name%TYPE;
v_age emp.age%TYPE;
BEGIN
OPEN emp_cursor FOR
SELECT name, age FROM emp WHERE emp.name = 'a';
LOOP
FETCH emp_cursor
INTO v_name, v_age;
EXIT WHEN emp_cursor%notfound;
dbms_output.put_line('名字是:' || v_name);
END LOOP;
CLOSE emp_cursor;
END;