SQL编程(2)

SQL编程(二)

本章继续上一章,内容并没有过多解释,大家试一试就明白了


--参照变量  用于存放数值指针的变量
--REF CURSOR  实现动态游标操作
DECLARE
TYPE s IS REF CURSOR;
emp_cursor s;
v_name emp.ename%TYPE;
v_sal  emp.sal%TYPE;
BEGIN
 OPEN emp_cursor FOR
     SELECT ename,sal FROM emp WHERE deptno = 's1';
 LOOP
     FETCH emp_cursor INTO v_name,v_sal;
     EXIT WHEN emp_cursor%NOTFOUND;
     dbms_output.put_line(v_name||v_sal);
 END LOOP;
 CLOSE emp_cursor;
END;

--REF objtype 可用于共享数据使用
CREATE OR REPLACE TYPE addrr AS OBJECT(
street  VARCHAR2(5),
city    VARCHAR2(6),
state   VARCHAR2(10),
zipcode VARCHAR2(6),
owner   VARCHAR2(10)
);
CREATE TABLE address OF addrr;
INSERT INTO address VALUES('北路','沈阳','辽宁','11000','fei');
commit;

CREATE TABLE p(
id VARCHAR2(32) primary KEY,name VARCHAR2(10),addrr REF addrr
);

INSERT INTO p SELECT 1,'fei',ref(p)
FROM address p WHERE p.owner='fei';
commit;

--非PL/SQL变量
--使用时要用 ‘:变量名’

--在SQL*PLUS中使用
var name VARCHAR2
BEGIN
  SELECT ename INTO :name FROM emp
  WHERE empno ='2';
END;

--使用 procedure Bulider变量 要用.create创建变量
.CREATE CHAR name LENGTH 10;
BEGIN
  SELECT ename INTO :name FROM emp
  WHERE empno ='2';
END;
TEXT_IO.PUT_LINE(:name);--TEXT_IO输出变量