您的位置:首页 > 其它

oralce 存储过程 游标的使用

2017-10-23 10:52 204 查看
--基于存储过程 用户的增删改查操作

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;

 

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: