Oracle存储过程中的select语句

发表于:2009-12-30 10:24

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:未知    来源:51Testing软件测试网采编

#
Oracle

  先看下这个存储过程:

  create or replace procedure pro_test
  is
  begin
  select * from t_test;
  end pro_test;

  这个存储过程正确吗?

  昨天因为这个,耽误了好久(在一个存储过程中用了select语句,但既没有用游标也没有用into)。

  在存储过程(oracle数据库)中如果用了select语句,要么使用“select into 变量”语句要么使用游标,oracle不支持单独的select语句(如表述有误请指出)。

  select into 比较简单,但是如果返回的是一个结果集就无法满足要求了。

  游标分Cursor型游标和SYS_REFCURSOR型游标两种

  Cursor型游标--不能用于参数传递

  create or replace procedure pro_test() is
  cusor_1 Cursor is select 字段名 from 表名 where 条件;
  (或者
  select class_name into cursor_2 from class where ...;
  cursor的另一种用法,需要写在begin和end之间)
  begin
  select class_name into cursor_2 from class where ...;

  可以使用

  for xxx in cursor
  loop
  ....
  end loop; --对Cursor进行遍历
  end pro_test;

  SYS_REFCURSOR型游标

  create or replace procedure pro_test(rsCursor out SYS_REFCURSOR) is
  cursor SYS_REFCURSOR;
  name varhcar(20);
  begin
  open cursor for
  select name from student where ...; --使用open来打开进行赋值

  --遍历

  loop
  fetch cursor into name --fetch into来打开遍历的每条数据
  exit when cursor%NOTFOUND; --未找到记录信息
  dbms_output.putline(xxxx);
  end loop;
  rsCursor := cursor;
  end pro_test;

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号