PL/SQL过程体
DECLARE
--声明部分
BEGIN
--执行部分
END;
DECLARE
sname varchar(20):='Jack';
BEGIN
sname :='HI!'||sname;
DBMS_OUTPUT.PUT_LINE(sname);
END;
--结果输出 : HI!Jack
游标
游标是指向查询结果集的一个指针,通过游标可以将查询结果集中的记录逐一取出。
游标声明
CURSOR 游标名
IS SELECT结果集查询语句;
执行游标
OPEN 游标名
FETCH 游标名 INTO 变量1[,变量2..]
或者
FETCH 游标名 INTO 游标变量;
CLOSE;
游标属性:%FOUND和%NOTFOUND
%FOUND:用于判断游标是否从结果集中提取数据。如果提取到数据,则返回值为TRUE,否则返回值为FALSE。
%NOTFOUND:与%FOUND相反,如果提取到数据则返回值为FALSE,否则为TRUE。
DECLARE
CURSOR mycursor
IS SELECT sname FROM student_0;
row_cursor mycursor%ROWTYPE;
BEGIN
OPEN mycursor;
LOOP
FETCH mycursor INTO row_cursor;
EXIT WHEN mycursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(row_cursor.sname);
END LOOP;
CLOSE mycursor;
END;
DECLARE
CURSOR mycursor
IS SELECT sname FROM student_0;
BEGIN
FOR row_cursor IN mycursor LOOP
DBMS_OUTPUT.PUT_LINE(row_cursor.sname);
END LOOP;
END;
创建存储过程
CREATE [OR REPLACE] PROCEDURE 过程名(参数1 [IN | OUT | IN OUT] 数据类型,参数2[IN | OUT | IN OUT] 数据类型...)
IS | AS
PL/SQL 过程体语句;
调用存储过程
BEGIN
过程名[参数];
END;
删除存储过程
DROP PROCEDURE 过程名;
CREATE OR REPLACE PROCEDURE SP_MYEMP(P_DEPTNO IN NUMBER,
P_HIREDATE OUT DATE,
P_JOB_ENAME IN OUT VARCHAR2)
AS
V_SAL NUMBER;
BEGIN
SELECT E.ENAME,E.SAL,E.HIRDATE
INTO P_JOB_ENAME,V_SAL,P_HIRDATE
FROM EMP E
WHERE E.DEPTNO=P_DEPTNO
AND E.JOB=P_JOB_ENAME;
DBMS_OUTPUT.PUT_LINE(P_JOB_NAME||' '||V_SAL||' '||P_HIREDATE);
END;
--调用存储过程
DECLARE
V_JOB_ENAME varchar2(20) :='MANAGER';
V_HIREDATE DATE;
BEGIN
SP_MYEMP(20,V_HIREDATE,V_JOB_ENAME);
END;
包就是把相关的存储过程、函数、变量、常量和游标等PL/SQL组合在一起,并赋予一定管理功能的程序块。
创建包体
CREATE [OR REPLACE] PACKAGE BODY mypackage
AS | IS
PROCEDURE 过程名(参数)
IS | AS
BEGIN
过程体;
END [过程名];
END;