当前位置:Gxlcms > mysql > 一个面试题,用存储过程实现。

一个面试题,用存储过程实现。

时间:2021-07-01 10:21:17 帮助过:201人阅读

学习游标和存储过程的好例子。嘻嘻嘻。。。。 请大家多多指点。。。。 无 create table TEST_SP( id VARCHAR2(10), name VARCHAR2(10)) insert into TEST_SP (ID, NAME)values ('1', '北');insert into TEST_SP (ID, NAME)values ('1', '京');insert into TES

学习游标和存储过程的好例子。嘻嘻嘻。。。。
请大家多多指点。。。。 <无>
  1. create table TEST_SP
  2. (
  3. id VARCHAR2(10),
  4. name VARCHAR2(10)
  5. )
  1. insert into TEST_SP (ID, NAME)
  2. values ('1', '北');
  3. insert into TEST_SP (ID, NAME)
  4. values ('1', '京');
  5. insert into TEST_SP (ID, NAME)
  6. values ('1', '的');
  7. insert into TEST_SP (ID, NAME)
  8. values ('2', '天');
  9. insert into TEST_SP (ID, NAME)
  10. values ('2', '气');
  11. insert into TEST_SP (ID, NAME)
  12. values ('3', '不');
  13. insert into TEST_SP (ID, NAME)
  14. values ('3', '好');
  1. create or replace procedure SP_TEST is
  2. CURSOR test_id_cs is select distinct ID from TEST_SP order by id asc;--声明游标 id游标
  3. Type mycur is ref cursor;
  4. cur mycur;
  5. v_name TEST_SP.name%type;
  6. v_id TEST_SP.id%type;
  7. v_sql varchar(512);
  8. v_names varchar(512);
  9. BEGIN
  10. open test_id_cs;
  11. loop
  12. fetch test_id_cs into v_id;
  13. EXIT WHEN test_id_cs%NOTFOUND;--当游标中没有数据时,退出循环
  14. dbms_output.put_line(test_id_cs%ROWCOUNT||'--'||v_id);
  15. ---内循环
  16. v_sql:='select name from TEST_SP where id ='||v_id;
  17. dbms_output.put_line('--'||v_sql);
  18. open cur For v_sql;
  19. Loop
  20. fetch cur Into v_name;--内循环
  21. exit when cur%notfound;--结束内循环
  22. -- dbms_output.put_line('name--'||v_name); //
输出id相同的名字 v_names:=v_names||v_name; END LOOP; CLOSE cur; ----内循环 --dbms_output.put_line('names--'||v_names);--得到相同id的名字 insert into TEST_SP(id,name) values (v_id,v_names); v_names:='';--清空names 临时变量 END LOOP; commit; CLOSE test_id_cs; end SP_TEST;

人气教程排行