Oracle复合变量的使用举例

--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 动态数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值