create or replace PROCEDURE PROC_ANJOULEE_DEMO (
BEGINTIME IN DATE , ENDTIME IN DATE DEFAULT sysdate, msg out varchar2 )
AS
--声明变量
V_CHvIPFACTNAME_COUNT NUMBER ;
V_CHIPFACTNAME VARCHAR2(30);
V_OBJ DICT_STB%ROWTYPE; --声明对象变量
v_currentTime DATE;
e_exception exception; --声明异常
e_code number; --异常编码
e_msg varchar2(1000); --异常信息
ceshi int;
--创建游标
CURSOR cursor_name IS SELECT DISTINCT CHIPFACTNAME FROM DICT_STB;
BEGIN
--FOR循环方式
FOR cur IN cursor_name LOOP
SELECT
--查询数据赋值到声明的变量中
count(1) into V_CHvIPFACTNAME_COUNT
FROM DICT_STB
--在sql中可以使用游标中值
where CHIPFACTNAME=cur.CHIPFACTNAME;
--输出数据
DBMS_OUTPUT.PUT_LINE(cur.CHIPFACTNAME||'--的数量:'|| V_CHvIPFACTNAME_COUNT||begintime);
IF cur.CHIPFACTNAME = '国科' THEN
BEGIN
SELECT SYSDATE INTO v_currentTime FROM DUAL;
DBMS_OUTPUT.PUT_LINE('-----------当前时间1是:'||v_currentTime);
END;
ELSIF cur.CHIPFACTNAME = '上海高清' THEN
BEGIN
SELECT SYSDATE INTO v_currentTime FROM DUAL;
DBMS_OUTPUT.PUT_LINE('-----------当前时间2是:'||v_currentTime);
END;
ELSE
BEGIN
SELECT SYSDATE INTO v_currentTime FROM DUAL;
DBMS_OUTPUT.PUT_LINE('..........');
END;
END IF;
END LOOP;
--查询一行数据到一个对象变量
BEGIN
SELECT * into V_OBJ FROM DICT_STB where id=99;
DBMS_OUTPUT.PUT_LINE('>>>>>>>对象变量'||v_obj.id||v_obj.FACTORY);
END;
BEGIN
-- 调用其他存储过程 直接用存储过程名称调用即可
END;
BEGIN
-- 调用有返回参数存储过程 直接调用,需要在父存储过程中定义子存储过程中返回的参数为变量即 可
END;
BEGIN
DBMS_OUTPUT.PUT_LINE('-----');
END;
BEGIN
--调用存储过程,直接调用存储过程名称
--子存储过程如果没有commit,可以再此一次commit
--proc_call;
--增加,删除,修改需要在此commit
--commit;
DBMS_OUTPUT.PUT_LINE('调用存储过程,直接调用存储过程名称');
END;
----异常处理
BEGIN
ceshi := 1/0;
exception
when e_exception then
e_code := SQLCODE;
e_msg := SUBSTR(SQLERRM, 1, 200);
DBMS_OUTPUT.PUT_LINE('??????????异常'||e_code||e_msg);
when others then
e_code := SQLCODE;
e_msg := SUBSTR(SQLERRM, 1, 200);
DBMS_OUTPUT.PUT_LINE('??????????异常'||e_code||e_msg);
--出参
msg:=e_msg;
END;
END PROC_ANJOULEE_DEMO;