您的位置:首页 > 数据库 > Oracle

Oracle使用手册(三)---存储过程与触发器

2006-07-21 14:29 671 查看
--存储过程
--3.带参数的存储过程

--rownum

--SELECT * FROM STUDENT WHERE sid=2 and ROWNUM<=1;
/
--SELECT * FROM STUDENT WHERE ROWNUM<=5;
/

CREATE OR REPLACE PROCEDURE MRFUTESTPRO
( MYID student.sid%type)
AS
MYNAME student.sname%type;
BEGIN
EXECUTE IMMEDIATE 'SELECT SNAME FROM STUDENT WHERE SID=:1 and ROWNUM<2'
USING MYID
RETURNING INTO MYNAME;
DBMS_OUTPUT.PUT_LINE('我的名字:'||MYNAME);
exception
when others then
dbms_output.put_line('没有符合条件的数据');
end MRFUTESTPRO;
/
BEGIN
MRFUTESTPRO(2);
END;
/
--创建一个存储过程实现输入一个学生的sid编号,查询出拥有该sid号的第一个学生的名字.

create or replace procedure mrfuproc
( tempid in student.sid%type ,
tempName out student.sname%type
)
as
myName nvarchar2(50);
begin
select sname into tempName from student where sid=tempid and rownum<2;
myName:='姓名'||tempName;
end mrfuproc;
/

declare
myid student.sid%type;
myName student.sname%type;
begin
myid:=10;
myName:='';
mrfuproc(myid,myName);
dbms_output.put_line(myid);
dbms_output.put_line(myName);
end;

/
--创建队列示例
CREATE SEQUENCE idseqSample
START WITH 1 -- 从1开始计数
INCREMENT BY 1 -- 每次加几个
NOMAXVALUE -- 不设置最大值
MINVALUE 1
CACHE 10 --缓冲区大小
NOCYCLE -- 一直累加,不循环
--NOCACHE -- 不建缓冲区
/
--创建索引
CREATE UNIQUE INDEX system.idindex ON system.student(recordid);
/
--创建队列
CREATE SEQUENCE system.idseq start with 1 increment by 1 maxvalue 987654321 minvalue 1 cache 10 ;
/
--创建触发器 ,实现插入student表中纪录时,自动插入recordid字段数据,并实现自动增量.
CREATE OR REPLACE TRIGGER system.idtrigger
BEFORE INSERT ON system.student REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW
BEGIN
SELECT system.idseq.NEXTVAL INTO :NEW.recordid FROM DUAL;
END;
/
--测试 ,首先删除表中的所有记录,然后插入30条纪录.最后检查效果.
delete from system.student;
/
declare
i int:=0;
begin
for i in 1..30 loop
insert into system.student (sid,sname,sage)values(i,'frj'||to_char(i),'26');
end loop;
end;
/
select * from system.student;
/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: