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

goodhy 2004-12-02 06:59:53
我在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;
...全文
208 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodhy 2004-12-06
  • 打赏
  • 举报
回复
正确答案由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;

goodhy 2004-12-06
  • 打赏
  • 举报
回复
up
马前小卒 2004-12-03
  • 打赏
  • 举报
回复
up
goodhy 2004-12-03
  • 打赏
  • 举报
回复
啊!我是8.1.7
gogowhy 2004-12-03
  • 打赏
  • 举报
回复

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;
goodhy 2004-12-03
  • 打赏
  • 举报
回复
to:gogowhy(123)
非常感谢,可还是不行!通不过编译
goodhy 2004-12-03
  • 打赏
  • 举报
回复
还有什么办法可以在存储过程里执行一个变量中的sql语句,或者ddl语句,等等
goodhy 2004-12-03
  • 打赏
  • 举报
回复
to:zhaokeke2004(大力)
因为要在oracle的存储过程中返回一个记录急,只有是通过游标返回,所以要用到游标。之所以execute immediate 是因为创建这个游标的sql语句是不确定的,使通过参数传进来的,所以想利用execute immediate 动态的生成游标
gogowhy 2004-12-03
  • 打赏
  • 举报
回复
--不信的话,试试这个

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 luck
gogowhy 2004-12-03
  • 打赏
  • 举报
回复

按照第二个应该不会错
呵呵~~

如果错的话,那就不是 execute immediate 的问题了

zhaokeke2004 2004-12-03
  • 打赏
  • 举报
回复
OPEN v_cut FOR select * from cd_dwdm
.......
不行么
zhaokeke2004 2004-12-03
  • 打赏
  • 举报
回复
为何一定要用execute immediate呢
goodhy 2004-12-03
  • 打赏
  • 举报
回复
to: gogowhy(123)
不行,照你说的改了,但是编译通不过,出错了。
gogowhy 2004-12-03
  • 打赏
  • 举报
回复
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;
goodhy 2004-12-03
  • 打赏
  • 举报
回复
to:zhpsam109(孤寂无边)
写错了,但是我改过来也还是不行,告诉我是一个无效的sql语句。
我如果把'OPEN v_cur FOR select * from cd_dwdm' 改成 'select * from cd_dwdm' 就可以不出错
所以我想知道怎么才能执行open v_cur这样的语句。
gogowhy 2004-12-03
  • 打赏
  • 举报
回复
看看是不是这样:

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;
GerryYang 2004-12-03
  • 打赏
  • 举报
回复
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;

zhpsam109 2004-12-03
  • 打赏
  • 举报
回复
声明的时候用的是v_cur,怎么到后面成了v_cut?

cstr:='select * from cd_dwdm';
open v_cur for cstr;

hyee 2004-12-02
  • 打赏
  • 举报
回复
begin
open v_cur for 'select ...';
end;
内容概要:本文围绕“单相逆变器闭环逆变电路PWM模型仿真研究”展开,基于Simulink平台构建单相逆变器的闭环控制系统仿真模型,重点研究PWM调制技术在逆变电路中的应用与实现。文中详细阐述了系统架构设计、电压电流双闭环控制策略的实现原理、控制器参数设计及仿真建模全过程,并通过仿真结果验证了控制方案在动态响应、稳态精度与系统稳定性方面的有效性。同时,文档还涵盖多种电力电子系统典型应用场景,如多类型短路故障仿真(中性点不接地、经小电阻接地、经消弧线圈接地等)、软开关技术、微电网能量管理、MPPT控制等,体现出较强的技术综合性和工程实践价值。; 适合人群:电气工程、自动化、电力电子与新能源等相关专业的高校本科生、研究生、科研人员,以及从事电力系统仿真、逆变器设计与新能源并网技术研发的工程技术人员。; 使用场景及目标:①掌握基于Simulink的单相逆变器闭环控制系统建模与PWM仿真方法;②深入理解双闭环控制、SPWM/SVPWM调制、系统稳定性分析等核心技术原理;③为课程设计、毕业设计、科研项目或实际工程开发提供可复用的仿真模型与技术支持; 阅读建议:建议结合文中仿真模型动手实践,重点掌握PI控制器参数整定、PWM信号生成机制与仿真结果分析方法,同时可延伸学习文档中涉及的软开关、故障仿真、微电网控制等关联技术,以拓展系统级设计能力。

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧