Oracle复合变量的使用举例

来源:互联网 发布:php 无法设置cookie 编辑:程序博客网 时间:2024/05/01 11:17
--oracle复合标量


/*****************************pl/sql记录 (类似于结构体) *********************/
--只能接受一条记录
DECLARE
  TYPE EMP_RECORD IS RECORD(
    EMPNO EMP.EMPNO%TYPE,
    ENAME EMP.ENAME%TYPE,
    DNAME DEPT.DNAME%TYPE);
  V_EMP EMP_RECORD;
BEGIN
  SELECT E.EMPNO, E.ENAME, D.DNAME INTO V_EMP
    FROM DEPT D
    LEFT JOIN  EMP E ON D.DEPTNO = E.DEPTNO
    WHERE E.EMPNO = 7369;
    DBMS_OUTPUT.put_line(V_EMP.EMPNO || '-' || V_EMP.ENAME || '-' || V_EMP.DNAME);
END;




/************************* pl/sql表   **************************/
--第一种用法
DECLARE
  TYPE EMP_TABLE IS TABLE OF EMP%ROWTYPE;
  ET EMP_TABLE;
BEGIN   
--使用如下的语句将查询得到的结果集批量的保存在变量里
  SELECT E.* BULK COLLECT INTO ET FROM EMP E;
  FOR I IN ET.FIRST() .. ET.LAST() LOOP
    DBMS_OUTPUT.put_line(I||'-姓名:' || ET(I).ENAME || '- 工作:' || ET(I).JOB);
  END LOOP;
END;


--第二种用法
DECLARE
  TYPE EMP_TABLE IS TABLE OF EMP.ENAME%TYPE INDEX BY BINARY_INTEGER;
  ET EMP_TABLE;
BEGIN
  --赋值
  FOR I IN (SELECT ROWNUM, ENAME FROM EMP) LOOP
    ET(I.ROWNUM) := I.ENAME;
  END LOOP;
  --取值
  FOR J IN ET.FIRST() .. ET.LAST() LOOP
    DBMS_OUTPUT.put_line(J || '-' || ET(J));
  END LOOP;
END;




/**************************参照变量(游标)*******************************/
DECLARE
  TYPE           EMP_CURSOR IS REF CURSOR;
  V_EMP_CURSOR   EMP_CURSOR;
  V_EMP_RECORD   EMP%ROWTYPE;
BEGIN
  OPEN V_EMP_CURSOR FOR SELECT * FROM EMP;
  LOOP
   FETCH V_EMP_CURSOR INTO V_EMP_RECORD;
   EXIT WHEN V_EMP_CURSOR%NOTFOUND;
   DBMS_OUTPUT.put_line(V_EMP_RECORD.EMPNO || '-' || V_EMP_RECORD.ENAME);
  END LOOP;
END;


-- 嵌套表
-- varry 动态数组
原创粉丝点击