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

来源:互联网 发布:mac iverilog 编辑:程序博客网 时间:2024/05/16 15:53

--存储过程
/*
--1.过程的语法结构
--参见:http://newland.cnblogs.com/archive/2006/04/05/367531.html

--2.执行存储过程
begin
  存储过程名;
end;
--创建好的存储过程可以被任何程序调用
*/

--3.带参数的存储过程
 /*  
   参数类型
   在PL/SQL过程中,可以有3种类型的参数。
   in参数:读入参数,主程序向过程传递参数值。
   out参数:读出参数,过程向主程序传递参数值。
   in out 参数:双向参数,过程与主程序双向交流数据。

*/


--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 
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;
/

原创粉丝点击