oralce 存储过程 游标的使用

来源:互联网 发布:新浪微博点赞软件 编辑:程序博客网 时间:2024/05/16 08:44
--基于存储过程 用户的增删改查操作
create or replace procedure insert_t_user
as
begin
  insert into t_user values('','','');
  
end;
--存储过程的调用
call insert_t_user;
--带参数的存储过程
CREATE OR REPLACE PROCEDURE insert_emp_proc(myempno NUMBER,myename VARCHAR2,myjob VARCHAR2,mymgr NUMBER,mydate DATE,mysal NUMBER,mycomm NUMBER,mydeptno NUMBER)  
AS  
BEGIN  
 INSERT INTO emp VALUES(myempno,myename,myjob,mymgr,mydate,mysal,mycomm,mydeptno);  
END;  
--执行带参数的执行的存储过程
CALL insert_emp_proc(999,'三九系列','坑爹',7689,SYSDATE,1800,4000,30); 


--更新数据存储过程
CREATE OR REPLACE PROCEDURE update_emp_proc(myempno IN NUMBER,myename IN VARCHAR2) AS  
BEGIN  
  UPDATE emp SET ename=myename WHERE empno=myempno;  
  END;
-- 使用动态sql
CREATE OR REPLACE PROCEDURE update_emp_proc(myempno NUMBER,myename VARCHAR2) AS  
mysql VARCHAR2(500);  
BEGIN  
  mysql:='UPDATE emp SET ename=:1 WHERE empno=:2';  
  --立即执行存储过程 使用相应的参数
  EXECUTE IMMEDIATE mysql USING myename,myempno;  
  END;
  
--
CALL update_emp_proc(999,'123');


--删除数据存储过程
CREATE PROCEDURE del_emp_proc(myemp NUMBER)  
AS  
BEGIN  
  DELETE emp WHERE empno=myemp;  
  END;  
  
CALL del_emp_proc(999);  
 
--查询数据存储过程
 --查询单条数据 
 ----查询数据存储过程  
CREATE OR REPLACE PROCEDURE selname_emp_proc(myempno IN NUMBER,myname OUT VARCHAR2)  
AS  
BEGIN  
  SELECT ename INTO myname FROM emp WHERE empno=myempno;  
  dbms_output.put_line(myname);  
  END;  
----调用  
DECLARE  
myname VARCHAR2(50);  
BEGIN  
  selname_emp_proc(7788,myname);  
  END;  
--
--PL/SQL 中 SELECT 语句只返回一行数据。如果超过一行数据,那么就要使用显式游标,
--INTO 子句中要有不 SELECT子句中相同列数量的变量。INTO 子句中也可以是记录变量。 
--------用游标显示查询所有的结果  
CREATE OR REPLACE procedure selAll_emp_proc  
AS  
CURSOR sel_emp IS SELECT * FROM emp;--定义游标,该游标指向查询结果  
rowresult emp%ROWTYPE;  
BEGIN  
  OPEN sel_emp;--打开游标  
  LOOP FETCH sel_emp INTO rowresult;--将游标中的值赋给rowresult  
    EXIT WHEN sel_emp%NOTFOUND;--判断:游标不存在时跳出循环  
    dbms_output.put_line('员工名:'||rowresult.ename||'工资:'||rowresult.sal);  
  END LOOP;  
  CLOSE sel_emp;--关闭游标  
  END;  
--
CALL selAll_emp_proc();




--
for rowresult in sel_emp loop
         dbms_output.put_line(c_row.empno||'-'||c_row.ename||'-'||c_row.job||'-'||c_row.sal);
       end loop;
end;


































 
   
原创粉丝点击