ORACLE存储过程中的动态游标

createorreplacepro_serch(tabnameinvarchar)isv_servicesnametabname.服务类型%type;--这个变量就是用... create or replace pro_serch( tabname in varchar )
is
v_servicesname tabname.服务类型%type; --这个变量就是用来存放所要取得的字段内容,但不知该如何定义
cursor curSort1 is select 服务类型 from tabname order by 编码; --此语句也不对提示找不到表名

begin
.....
展开
 我来答
匿名用户
2013-04-01
展开全部
你这种, 表名字是是参数的情况下, 需要使用 动态 sql 来处理了。

你需要先定义一个变量, 来存储你的 sql 语句。

然后 OPEN v_cursor FOR 那个 sql 语句的字符串

下面是一个例子:

SQL> DECLARE
2 TYPE refcursor IS REF CURSOR;
3 v_cursor REFCURSOR;
4 v_Sql VARCHAR(200);
5 v_name VARCHAR(10);
6 BEGIN
7 -- 动态SQL
8 v_Sql := 'SELECT name FROM test_dysql';
9 -- 打开游标.
10 OPEN v_cursor FOR v_SQL;
11 -- 循环处理.
12 LOOP
13 -- 填充数据.
14 FETCH v_cursor INTO v_name;
15 -- 无数据时 退出循环.
16 EXIT WHEN v_cursor%NOTFOUND;
17 -- 输出.
18 dbms_output.put_line(v_name);
19 END LOOP;
20 -- 关闭游标.
21 CLOSE v_cursor;
22 EXCEPTION
23 WHEN OTHERS THEN
24 -- 发生异常时,如果游标还打开,那么关闭掉.
25 IF (v_cursor%isopen) THEN
26 CLOSE v_cursor;
27 END IF;
28 RAISE;
29 END;
30 /
A
B
C
D
E

PL/SQL procedure successfully completed.
匿名用户
2013-04-01
展开全部
你用Oracle 当前的用户是否创建了这张表,如果没有。。。那就是你没有建表的原因了还有可能你的表不是建立在当前的用户模式下,比如你的是建立在用户Scott模式下则你的语句应该这样写cursor curSort1 is select 服务类型 from scott.tabname order by 编码;
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-04-01
展开全部
具体写法不记得了.大概意思是先定义一个变量类型好像有个row指代这一行的所有字段类型.然后运行游标.用fech接收一行数据到定义的变量里. 从变量里取值.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式