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;