CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Oracle >  基础和管理

请教各位!急!很菜的问题

楼主goodhy(剑走偏锋)2004-12-02 18:59:53 在 Oracle / 基础和管理 提问

我在PL程序块中给一个varchar2类型的变量赋值,内容是打开一个游标,请问怎么样让oracle去执行这个varchar2变量中的语句。  
   
  create   or   replace   procedure   DotNetPagination()  
  is  
      type   t_cursor   is   ref   cursor;  
      v_cur   t_cursor;  
      Cstr   varchar2(1000);  
  begin          
      Cstr   :=   'OPEN   v_cut   FOR   select   *   from   cd_dwdm';  
   
      execute   immediate   Cstr;                         --这句话出错。  
   
  end; 问题点数:50、回复次数:19Top

1 楼hyee(小狗旺财)回复于 2004-12-02 22:16:44 得分 5

begin  
  open   v_cur   for   'select   ...';  
  end;Top

2 楼zhpsam109(JACKY.昊昊)回复于 2004-12-03 09:00:42 得分 5

声明的时候用的是v_cur,怎么到后面成了v_cut?  
   
  cstr:='select   *   from   cd_dwdm';  
  open   v_cur   for   cstr;  
   
  Top

3 楼GerryYang(轻尘)回复于 2004-12-03 09:01:23 得分 5

create   or   replace   procedure   DotNetPagination()  
  is  
      type   t_cursor   is   ref   cursor;  
      v_cur   t_cursor;  
      Cstr   varchar2(1000);  
      cursor   cur   is   select   *   from   cd_dwdm;//定义邮标  
   
  begin          
      Open   cursor;   //打开邮标  
      close   cursor;//关闭邮标      
  end;  
   
  Top

4 楼gogowhy(123)回复于 2004-12-03 09:10:08 得分 30

看看是不是这样:  
   
  create   or   replace   procedure   DotNetPagination()  
  is  
      type   t_cursor   is   ref   cursor;  
      v_cur   t_cursor;  
      Cstr   varchar2(1000);  
  begin        
   
  Cstr   :=   'OPEN   :v_cut   FOR   select   *   from   cd_dwdm';   --变量前加了":"  
   
  execute   immediate   Cstr   using   v_cut;       --关键字   using    
   
  --如果是多个变量,那就按照string里面的顺序  
  --如:execute   immediate   Cstr   using   v_cut,v_cut2,v_cut3;  
   
  end;  
  Top

5 楼goodhy(剑走偏锋)回复于 2004-12-03 09:16:12 得分 0

to:zhpsam109(孤寂无边)    
  写错了,但是我改过来也还是不行,告诉我是一个无效的sql语句。  
  我如果把'OPEN   v_cur   FOR   select   *   from   cd_dwdm'   改成   'select   *   from   cd_dwdm'   就可以不出错  
  所以我想知道怎么才能执行open   v_cur这样的语句。Top

6 楼gogowhy(123)回复于 2004-12-03 09:16:22 得分 0

sorry   ,笔误了  
   
  create   or   replace   procedure   DotNetPagination       --如果没有参数,好象不用()  
  is  
      type   t_cursor   is   ref   cursor;  
      v_cur   t_cursor;  
      Cstr   varchar2(1000);  
  begin        
   
  Cstr   :=   'OPEN   :v_cur111     FOR   select   *   from   cd_dwdm';   --变量前加了":",这里可以随意的名字  
   
  execute   immediate   Cstr   using   v_cur;       --关键字   using    
   
  --如果是多个变量,那就按照string里面的顺序  
  --如:execute   immediate   Cstr   using   v_cur,v_cur2,v_cur3;  
   
  end;  
  Top

7 楼goodhy(剑走偏锋)回复于 2004-12-03 09:23:25 得分 0

to:   gogowhy(123)    
  不行,照你说的改了,但是编译通不过,出错了。Top

8 楼zhaokeke2004(男人·海洋)回复于 2004-12-03 09:23:48 得分 5

为何一定要用execute   immediate呢Top

9 楼zhaokeke2004(男人·海洋)回复于 2004-12-03 09:24:34 得分 0

OPEN   v_cut   FOR   select   *   from   cd_dwdm  
  .......  
  不行么Top

10 楼gogowhy(123)回复于 2004-12-03 09:25:52 得分 0

 
  按照第二个应该不会错  
  呵呵~~  
   
  如果错的话,那就不是   execute   immediate   的问题了  
   
  Top

11 楼gogowhy(123)回复于 2004-12-03 09:27:14 得分 0

--不信的话,试试这个  
   
  create   or   replace   procedure   DotNetPagination  
  is  
      type   t_cursor   is   ref   cursor;  
      v_cur   t_cursor;  
      Cstr   varchar2(1000);  
  begin        
   
  Cstr   :=   'OPEN   :aa   FOR   select   *   from   tab';  
   
  execute   immediate   Cstr   using   v_cur;  
   
  end;  
  /  
   
   
   
  --good   luckTop

12 楼goodhy(剑走偏锋)回复于 2004-12-03 09:30:16 得分 0

to:zhaokeke2004(大力)    
  因为要在oracle的存储过程中返回一个记录急,只有是通过游标返回,所以要用到游标。之所以execute   immediate   是因为创建这个游标的sql语句是不确定的,使通过参数传进来的,所以想利用execute   immediate   动态的生成游标Top

13 楼goodhy(剑走偏锋)回复于 2004-12-03 09:33:15 得分 0

还有什么办法可以在存储过程里执行一个变量中的sql语句,或者ddl语句,等等Top

14 楼goodhy(剑走偏锋)回复于 2004-12-03 09:36:52 得分 0

to:gogowhy(123)  
  非常感谢,可还是不行!通不过编译Top

15 楼gogowhy(123)回复于 2004-12-03 09:38:19 得分 0

 
  to:   goodhy(剑走偏锋)    
   
  你在什么地方测试的?  
   
  下面这个存储过程绝对没有问题,我测试过的。   oracle9i  
   
   
  create   or   replace   procedure   DotNetPagination  
  is  
      type   t_cursor   is   ref   cursor;  
      v_cur   t_cursor;  
      Cstr   varchar2(1000);  
  begin        
   
  Cstr   :=   'OPEN   :aa   FOR   select   *   from   tab';  
   
  execute   immediate   Cstr   using   v_cur;  
   
  end;Top

16 楼goodhy(剑走偏锋)回复于 2004-12-03 09:39:53 得分 0

啊!我是8.1.7Top

17 楼hero1981(英雄)回复于 2004-12-03 09:54:10 得分 0

upTop

18 楼goodhy(剑走偏锋)回复于 2004-12-06 09:55:45 得分 0

upTop

19 楼goodhy(剑走偏锋)回复于 2004-12-06 10:18:54 得分 0

正确答案由liuyi8903(juventus)提供  
  create   or   replace   procedure   DotNetPagination  
  is  
      type   t_cursor   is   ref   cursor;  
      v_cur   t_cursor;  
      Cstr   varchar2(1000);  
  begin          
      Cstr   :=   '   select   *   from   cd_dwdm';  
   
      execute   immediate   Cstr;    
      OPEN   v_cur   For   cstr;              
   
  end   DotNetPagination;  
   
  Top

相关问题

  • 菜鸟问题,但很急,麻烦各位大虾指教
  • 我是菜鸟请各位高手帮帮忙!我很急,很急的!!!先谢谢各位高手
  • 一个很菜的问题,急啊..各位大哥快来...小弟扣谢!!
  • 向各位请教 (很急)
  • 很菜的问题,各位请进!!!
  • 急急急~~~~~~~!请各位高手们帮帮我这个菜鸟!~~~
  • 急急急,各位帮忙看看菜菜我的代码怎么不对???
  • 在VC下关于文件输入的问题,很菜的问题,但是很急,各位请帮帮忙啦!
  • 菜鸟问题!请各位大虾帮忙急!
  • 一个菜问题,急需各位帮助..谢谢

关键词

  • 语句
  • sql
  • 存储过程
  • 执行
  • oracle
  • cstr
  • cur
  • dwdm
  • cursor
  • dotnetpagination

得分解答快速导航

  • 帖主:goodhy
  • hyee
  • zhpsam109
  • GerryYang
  • gogowhy
  • zhaokeke2004

相关链接

  • Oracle类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo