oracle夜未眠之二视图、函数、存储过程、触发器四连发

1、创建视图

CREATE  OR replace VIEW my_view(id,stuname,stupassword)) AS SELECT s.id,s.stuame,item.stupassword FROM stu s,stu_item item WHERE item.fid=stu.id;

2、使用视图

SELECT *  FROM  my_view WHERE stuname='testname';

3、查看视图创建语句

SELECT TEST FROM my_view


4、游标的创建和使用

DECLARE 
CURSOR my_cur IS SELECT * FROM stu
stus stu%ROWTYPE;
cunt NUMBER;

BEGIN
IF my_cur%ISOPEN THEN
NULL;
ELSE
OPEN my_cur;
END IF;

FOR stus IN my_cur LOOP
cunt := mu_cur%ROWCOUNT;
dbms_output.put_line(stus.stuname);
END LOOP

END;

5、函数的创建和使用

CREATE OR REPLACE FUNCTION my_fun(sname stu.stuname%Type) RETURN NUMBER  AS 

re NUMBER;
BEGIN
SELECT COUNT(*) INTO re FROM stu WHERE stu.stuname = 'testname';
RETURN re;
END;

SELECT my_fun('testname') FROM dual

6、存储过程的创建和使用

CREATE OR REPLACE PROCEDURE my_pro(sname stu.stuname) AS 

cunt NUMBER;

BEGIN
SELECT COUNT(*) INTO cunt FROM stu s WHERE s.stuname=sname;
IF cunt = 0 THEN
INSERT INTO stu(stuname) VALUES (sname);
ELSE
NULL;
END IF;
END;

oracle中调用存储过程,如果是不带参数的可以将上面的格式as 改成is ,调用也可以直接使用call my_pro();

DECLARE 
sname stu.stuname%TYPE;
BEGIN
sname :='testname';
my_pro(sname);
END;

7、触发器的创建和使用

CREATE  OR REPLACE TRIGGER my_tri_stu
BEFORE INSERT OR UPDATE OR DELETE ON stu FOR EACH ROW
DECLARE cunt NUMBER;
BEGIN
SELECT COUNT(*) INTO cunt FROM stu WHERE stu.stuname='testname';
IF cunt= 0 THEN
INSERT INTO stu(stuname) VALUES ('test');
ELSIF
DELETE FROM stu WHERE stuname='testname' ;
END IF;

CASE
WHEN INSERT THEN
dbms_output.put_line('插入');
WHEN UPDATE THEN
dbms_output.put_line('更新');
WHEN DELETE THEN
dbms_output.put_line('删除');
END CASE
END;







 

原文地址:https://www.cnblogs.com/fangj/p/2236287.html