oracle存储过程和函数示例

LILIJJJJ 2012-11-13 08:22:22
--1、创建表
CREATE TABLE STUDENT
(
SNO NUMBER(4) PRIMARY KEY,
SNAME VARCHAR2(20),
SAGE NUMBER(4),
SSEX VARCHAR(2)
)
--2、创建序列
CREATE SEQUENCE MY_NUM
START WITH 1
INCREMENT BY 1
MAXVALUE 30 NOCYCLE;
--3、设置约束,默认值等操作
--sage设置check约束
ALTER TABLE STUDENT MODIFY
(
SAGE CHECK(SAGE>18)
);
--SSEX设置check约束
ALTER TABLE STUDENT MODIFY
(
SSEX CHECK(SSEX='男' or ssex='女')
);
--sage设置默认值
ALTER TABLE STUDENT MODIFY
(
SAGE DEFAULT(20)
);
--4、插入数据
INSERT INTO STUDENT VALUES(MY_NUM.NEXTVAL,'张三',default,'男');
INSERT INTO STUDENT VALUES(MY_NUM.NEXTVAL,'李斯',21,'女');
INSERT INTO STUDENT VALUES(MY_NUM.NEXTVAL,'天启',default,'男');
--附加:查看当前序列的号数
SELECT MY_NUM.CURRVAL FROM DUAL;
--5、查询表
SELECT * FROM STUDENT
--6、使用事务
BEGIN
INSERT INTO STUDENT VALUES(MY_NUM.NEXTVAL,'王林',23,'男');
UPDATE STUDENT SET SSEX='男' WHERE SNAME='天启';
COMMIT;
DBMS_OUTPUT.put_line('语句执行成功');
EXCEPTION --出异常执行该语句
WHEN OTHERS THEN
ROLLBACK;
DBMS_OUTPUT.put_line('语句执行失败');
END;
--7、创建存储过程
--例题1:
----不带参数的存储过程
CREATE OR REPLACE PROCEDURE STUDENT_PRO
AS
BEGIN
DBMS_OUTPUT.put_line('创建存储过程'); ----此处必须加分号
END;
--调用存储过程
BEGIN
STUDENT_PRO;----此处必须加分号
END;
--删除存储过程
drop procedure STUDENT_PRO;
--例题2:
---默认为in输入参数,OUT为输出参数,TESTOUT中带两个参数,一个输入参数,一个输出参数
CREATE OR REPLACE PROCEDURE TESTOUT
(VALUE1 NUMBER,VALUE2 OUT NUMBER)
AS
BEGIN
VALUE2:=VALUE1+100;
END;
--调用存储过程
DECLARE
RESULT NUMBER;
BEGIN
TESTOUT(10,RESULT);
DBMS_OUTPUT.put_line(RESULT);
END;
--例题3:
SELECT * FROM SCOTT.DEPT;
----in out参数
CREATE OR REPLACE PROCEDURE TEST_INOUT
(
DNO SCOTT.DEPT.DEPTNO%TYPE,
NAMES OUT SCOTT.DEPT.DNAME%TYPE
)
AS
BEGIN
--根据dno查询names---(DNAME INTO NAMES)表示将查询到得DNAME赋值给NAMES
SELECT DNAME INTO NAMES FROM SCOTT.DEPT WHERE DEPTNO=DNO;
END;

--调用存储过程
--因为有out输出参数,所以调用时必须声明变量
DECLARE
NAMES VARCHAR(20);
BEGIN
TEST_INOUT(10,NAMES);
DBMS_OUTPUT.put_line(NAMES);
END;
--8、函数
----格式,特别注意每句代码的位置
CREATE OR REPLACE FUNCTION GET_NAME
(
DNO SCOTT.DEPT.DEPTNO%TYPE
)
RETURN VARCHAR2---返回数据类型
AS
--声明变量保存dname,并返回
NAMES VARCHAR2(20);
BEGIN
--根据DNO查询DNAME
SELECT DNAME INTO NAMES FROM SCOTT.DEPT WHERE DEPTNO=DNO;
RETURN NAMES;--返回该数据类型的值
END;

--调用函数
BEGIN
DBMS_OUTPUT.put_line('部门名称:'||GET_NAME(20));---字符串与变量连接使用||
END;

--删除函数
DROP FUNCTION GET_NAME;
...全文
148 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
woof_1128 2012-11-14
  • 打赏
  • 举报
回复
fw0124 2012-11-14
  • 打赏
  • 举报
回复
写博客阿,记在这里多不好找
wanglipo 2012-11-14
  • 打赏
  • 举报
回复
晕,发错了
wanglipo 2012-11-14
  • 打赏
  • 举报
回复
夏天__ 2012-11-13
  • 打赏
  • 举报
回复
挺好。,很详细。、

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧