---使用游标查询person中所有的的姓名和身高,并将其打印出来
declare
  ---声明游标
  CURSOR C_PERSON is
    select NAME, AGE from PERSON;
  --声明变量接收游标中的数据
  v_NAME PERSON.NAME%TYPE;
  v_AGE  PERSON.AGE%TYPE;
BEGIN
  --打开游标
  OPEN C_PERSON;
  LOOP
    --获取游标中的数据
    FETCH C_PERSON  INTO V_NAME, V_AGE;
    --如果没有指向的语句了,就退出
    EXIT WHEN C_PERSON%NOTFOUND;
    --打印输出
    DBMS_OUTPUT.put_line(V_NAME || \'--\' || V_AGE);
  END LOOP;
  --关闭游标
  CLOSE C_PERSON;
end;
8、带参数的游标
---使用游标查询person中【身高】为【1.68】的姓名和身高,并将其打印出来
DECLARE
  ---声明游标
  CURSOR C_PERSON(V_HEIGHT person.height%type) is
    select NAME, AGE from PERSON where height = V_height;
  --声明变量接收游标中的数据
  v_NAME PERSON.NAME%TYPE;
  v_AGE  PERSON.AGE%TYPE;
BEGIN
  --打开游标
  OPEN C_PERSON(1.68);
  LOOP
    --获取游标中的数据
    FETCH C_PERSON
INTO V_NAME, V_AGE;
    --如果没有指向的语句了,就退出
    EXIT WHEN C_PERSON%NOTFOUND;
    --打印输出
    DBMS_OUTPUT.put_line(V_NAME || \'--\' || V_AGE);
  END LOOP;
  --关闭游标
  CLOSE C_PERSON;
END;
9、存储过程
以上是在TestWindow中执行的,可以进行调试
如果写的是procedure,就不能调试了
exec p_hello 用这个来在sqlplus调用存储过程。
is as 是可以互相替换的。
存储过程中没有declare关键字,decalre用在语句块中。
10、带输入参数的存储过程
create or replace procedure p_queryNameAgeHeight(v_name in person.name%type) as
v_age person.age%type;
v_height person.height%type;
begin
  select age,height into v_age,v_height from person where person.name=v_name;
  dbms_output.put_line(v_name||\'--\'||v_age||\'--\'||v_height);
end p_queryNameAgeHeight;
执行
exec p_querynameageheight(\'may\');
11、带输出参数的存储过程
重新写一个带输出参数的存储过程
通过testWindow写代码调用之
存储过程和testWindow中的输出都显示在这里了。
create or replace procedure p_queryNameAgeHeight(v_name in person.name%type,
v_height in out person.height%type) as
  v_age person.age%type;
begin
  select age, height
    into v_age, v_height
    from person
   where person.name = v_name;
  dbms_output.put_line(v_name || \'--\' || v_age || \'--\' || v_height);
end p_queryNameAgeHeight;
-- Created on 2019/11/14 by LENOVO 
declare 
  v_height person.height%type;
begin
  -- Test statements here
  p_querynameageheight(\'may\',v_height);
  dbms_output.put_line(v_height);
end;
通常在程序中,使用方法调用存储过程。
【存储函数】类似于 【存储过程】,唯一的区别是 【存储函数】必须有返回值,而【存储过程】没有返回值,但可以通过输出参数代替。
目前大家调用的都是【存储过程】,因为相对灵活。

