存储过程实际上是SQL+流程控制的结合体,相当于带了一丢丢编程的味道。
学会基础语法+流程控制语法,任何一个 Coder 都能够轻松地的写出存储过程了。
CREATE OR REPLACE PROCEDURE p_Mebugs
BEGIN
DELETE mebugs_log t WHERE (sysdate - to_date(t.starttime,'yyyyMMddhh24miss')) > 180;
END p_Mebugs;
CREATE OR REPLACE PROCEDURE p_Mebugs(time NUMBER)
countNo NUMBER;
testMsg VARCHAR2(256);
testObj := 123;
BEGIN
SELECT count(*) INTO countNo FROM mebugs_log WHERE starttime=time;
DBMS_OUTPUT.PUT_LINE(time||'记录数'||countNo);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('没有找到记录');
END p_Mebugs;
EXEC p_Mebugs(time);
DECLARE time NUMBER;
BEGIN
p_Mebugs(time);
DBMS_OUTPUT.PUT_LINE(pname);
END;
DROP PROCEDURE p_Mebugs;
SELECT object_name,status FROM USER_OBJECTS WHERE object_type='PROCEDURE';
ALTER PROCEDURE p_Mebugs COMPILE;
SELECT * FROM USER_SOURCE WHERE TYPE='PROCEDURE';
流程控制相关语法(在BEGIN...END程序块中运行)
IF 判断条件 THEN
BEGIN
END;
ELSIF 判断条件 THEN
BEGIN
END;
BEGIN
END;
END IF;
--WHILE循环
WHILE 判断条件 LOOP
BEGIN
--DOING SQL
END;
END LOOP;
FOR 参数 IN 数组/游标 LOOP
BEGIN
END;
END LOOP;
Oracle 中本是没有数组的概念的。
数组其实就是一张表(Table), 每个数组元素就是表中的一个记录。
用户可以使用Oracle 已经定义好的数组类型,testPram OUT array。
Oracle中Cursor是非常有用的。
游标用于遍历临时表中的查询结果(简单理解就是游标型变量用于存多个值,可以被遍历)。
其相关方法和属性也很多,此处常规介绍。
CREATE OR REPLACE PROCEDURE p_Mebugs
cusorTest1 Cursor ID SELETE starttime FROM mebugs_log;
cusorTest2 Cursor;
BEGIN
SELETE starttime INTO cusorTest2 FROM mebugs_log;
END p_Mebugs;
CREATE OR REPLACE PROCEDURE p_Mebugs(testCursor OUT SYS_REFCURSOR)
cursor SYS_REFCURSOR;
name varhcar(20);
BEGIN
OPEN cursor FOR SELETE starttime FROM mebugs_log;
FETCH cursor INTO name;
EXIT WHEN cursor%NOTFOUND;
DBMS_OUTPUT.PUTLINE(name);
END LOOP;
testCursor := cursor;
END p_Mebugs;
DECLARE
name VARCHAR2(10);
time VARCHAR2(10);
CURSOR emp_cursor IS SELECT name,time FROM mebugs_log;
BEGIN
OPEN emp_cursor;
FETCH emp_cursor INTO v_ename,v_job;
头像:系统为您提供了12个头像自由选择,初次打开随机为你选择一个
邮箱:可选提交邮箱,该信息不会外泄,或将上线管理员回复邮件通知
网址:可选提交网址,评论区该地址将以外链的形式展示在您的昵称上
记忆:浏览器将记忆您已选择或填写过得信息,下次评论无需重复输入
审核:提供一个和谐友善的评论环境,本站所有评论需要经过人工审核