(求助)在DBMS_SQL中打开游标是啥意思?? 这是在动态游标中使用的,上面是得到一个指针,动态游标可以让你动态编辑要执行的SQL文,不需要事先写好。还可以实现DDL语句的执行 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CREATE OR REPLACE PROCEDURE CreateTable( p_Description IN VARCHAR2)ISv_CURSOR NUMBER;v_CreateString VARCHAR2(100);v_NumRows INTEGER;BEGIN v_Cursor := DBMS_SQL.OPEN_CURSOR; v_CreateString := 'CREATE TABLE temp_table'||p_Description; DBMS_SQL.PARSE(v_CURSOR,v_CreateString,DBMS_SQL.V7); v_NumRows := DBMS_SQL.EXECUTE(v_Cursor); DBMS_SQL.CLOSE_CURSOR(v_Cursor);END;这个v_Cursor被定义的是什么?执行的时候返回的又是什么?(好不明白呀?):( 动态游标不仅可以执行sql,还可以执行dml。上面的过程游标就被定义为dml语句,动态创建表,这是静态游标不能完成的。执行后v_NumRows返回操作是否完成的信息。静态游标只能执行查询语句。 这种游标可以嵌套吗?比如我定义一个动态游标是DDL的,在LOOP在过程中我再OPEN一个动态游标可以吗?因为我要用动态游标建一个表,而这张表的字段名还依赖于一个被选出来的记录集(也就是上一个游标)的某一字段的记录内容,两个都是动态的,怎么办??举例:第一次游标的记录集: Year xzq value 2000 北京 10 2003 天津 20要建一个表: 2000 2003 10 20 请高手赐教,头都大了!:( 为什么不用create table as select??? 不是很清楚你要建的表的结构,你自己换一下试试.还有,列名好像不能为数字或中文字符.我建了不成功.create or replace procedure CreateTable isv_col1 varchar2(20);v_col2 varchar2(20);v_col3 varchar2(20);v_createtable varchar2(20);v_Cursor number;cursor createtable is select year,xzq,value from table1;begin open createtable; loop fetch createtable into v_col1,v_col2,v_col3; v_Cursor := Dbms_Sql.Open_Cursor; v_createtable := '你建表的语句' DBms_sql.Parse(v_Cursor,v_createtable,DBMS_Sql.v7); Dbms_Sql.Close_Cursor(v_Cursor); exit when createtable%notfound; end loop; close createtable; end CreateTable; 请教oracle触发器的问题。谢谢 。。 性能问题:SQL优化,索引已经利用上,最终返回也不多,为什么还是很慢 两个字段同时满足条件的表述? 如何在oracle实现主动数据库的功能 我写了一个判断字段非空的trigger,觉得有问题,帮忙看一下 请教一个行列转换并带数据汇总的sql 删除一大表,超难,各位可有什么好建议 在oracle里定义好了一个函数,怎样查看这个函数的源代码? Oracle 中 怎么执行两句select 语句 字段值的自动计算如何实现? 数据库迁移:Sql Server --> Oracle !(重谢) 帮帮忙把这个MSSQLSERVER的存储过程改成ORACLE的
p_Description IN VARCHAR2
)IS
v_CURSOR NUMBER;
v_CreateString VARCHAR2(100);
v_NumRows INTEGER;
BEGIN
v_Cursor := DBMS_SQL.OPEN_CURSOR;
v_CreateString := 'CREATE TABLE temp_table'||p_Description;
DBMS_SQL.PARSE(v_CURSOR,v_CreateString,DBMS_SQL.V7);
v_NumRows := DBMS_SQL.EXECUTE(v_Cursor);
DBMS_SQL.CLOSE_CURSOR(v_Cursor);END;
这个v_Cursor被定义的是什么?执行的时候返回的又是什么?(好不明白呀?):(
上面的过程游标就被定义为dml语句,动态创建表,这是静态游标不能完成的。执行后v_NumRows返回操作是否完成的信息。静态游标只能执行查询语句。
举例:
第一次游标的记录集:
Year xzq value
2000 北京 10
2003 天津 20
要建一个表:
2000 2003
10 20 请高手赐教,头都大了!:(
还有,列名好像不能为数字或中文字符.我建了不成功.
create or replace procedure CreateTable is
v_col1 varchar2(20);
v_col2 varchar2(20);
v_col3 varchar2(20);
v_createtable varchar2(20);
v_Cursor number;
cursor createtable is
select year,xzq,value from table1;
begin
open createtable;
loop
fetch createtable into v_col1,v_col2,v_col3;
v_Cursor := Dbms_Sql.Open_Cursor;
v_createtable := '你建表的语句'
DBms_sql.Parse(v_Cursor,v_createtable,DBMS_Sql.v7);
Dbms_Sql.Close_Cursor(v_Cursor);
exit when createtable%notfound;
end loop;
close createtable;
end CreateTable;