一、代码
/*1.定义存过*/
CREATE OR REPLACE
PROCEDURE PRO_RE_USER_ORD_GOODS(
--NOW_DATE格式:YYYYMMDD 如:20190801(此时统计的是2019年7月31日的数据)
NOW_DATE IN VARCHAR2
)
IS
/*2.定义变量 START*/
--定义RECORD型记录类型;
TYPE T_RECORD IS RECORD (
GOODS_CODE VARCHAR2 (64),
GOODS_NAME VARCHAR2 (64)
) ;
--定义返回结果集接收的变量,类型为T_RECORD;
PS:这里也可以不用record,直接指定V_ROWRESUT为%rowtype类型
V_ROWRESUT T_RECORD ;
--定义主键
PID VARCHAR2 (256) ;
/*2.定义变量 end*/
/*3.定义游标,执行查询结果集操作 START*/
CURSOR CUR_RE_USER_ORD_GOODS
IS
--查询语句开始
SELECT
A .GOODS_CODE,
B.GOODS_NAME
FROM
(
SELECT
ORD.GOODS_CODE
FROM
ORDER_INFO ORD
GROUP BY
ORD.GOODS_CODE
) A
LEFT JOIN GOODS_INFO B ON A .GOODS_CODE = B.GOODS_CODE ;
--查询语句结束
/*3.定义游标,执行查询结果集操作 END*/
/*4.打开并循环游标,进行数据操作 START*/
BEGIN
OPEN CUR_RE_USER_ORD_GOODS; --打开游标;
LOOP --开始执行循环,遍历查询结果集表;
FETCH CUR_RE_USER_ORD_GOODS INTO V_ROWRESUT; --循环游标并赋值给结构体变量;
EXIT WHEN CUR_RE_USER_ORD_GOODS %NOTFOUND; --如果游标遍历完成,就退出循环;
--获取 UUID 并赋值给 PID 变量;
SELECT SYS_GUID() INTO PID FROM DUAL;
--插入“订购商品记录表” 开始
INSERT INTO RE_USER_ORD_GOODS (
ID,
GOODS_CODE,
GOODS_NAME,
CREATE_TIME
)VALUES(
PID,
V_ROWRESUT.GOODS_CODE,
V_ROWRESUT.GOODS_NAME,
SYSDATE
);
--插入“订购商品记录表” 结束
END LOOP; --结束循环;
CLOSE CUR_RE_USER_ORD_GOODS; --关闭游标;
COMMIT; --提交 INSERT 操作;
END;
/*4.打开并循环游标,进行数据操作 END*/
oracle存储过程中is和as区别
- 在存储过程(PROCEDURE)和函数(FUNCTION)中没有区别;
- 在视图(VIEW)中只能用AS不能用IS;
- 在游标(CURSOR)中只能用IS不能用AS。
声明变量的方式
- v_temp varchar(10)
- v_temp tablename.property%type(表名属性名%type,指的是一个表中某个字段的类型,这样可以灵活使用)
- v_stu student%rowtype;(这种类型就是定义一个变量,这个变量的类型为一个表数据的行类型,用于接收查询的一整行数据)
赋值方式