x表中有3列a,b,c,分别存放着列名,表明,过滤条件。
我现在在存储过程中用第一个游标rec取出这3列的值,然后想用第二个游标rec2存放select rec.a from rec.b where rec.c的值,但是现在select rec.a from rec.b where rec.c有错,不知道应该怎么来写这句程序。
我现在在存储过程中用第一个游标rec取出这3列的值,然后想用第二个游标rec2存放select rec.a from rec.b where rec.c的值,但是现在select rec.a from rec.b where rec.c有错,不知道应该怎么来写这句程序。
解决方案 »
- 是否可以删除USERS表空间?
- [color=#FF0000]【时间问题】在线急等,请大神指教![/color]
- 请问oracle中的snapshot怎么使用,谁能告诉我使用的具体步骤
- oracle精简客户端,谁会做?
- oracle10g如何使用?
- 数据统计,帮帮忙。
- 安装数据库问题
- ====救命啊===,500分求此问题的解决,一次只能开100分 -- SOS
- null的问题
- Oracle 希望大神帮帮忙
- 函数调用错误:wrong number or types of arguments in call to 'ID_IS_GOOD'
- C#开发的窗口程序访问oracle数据库,要不要建立客户端连接
execute immediate 'select '||rec.a||' from '||rec.b||' where '||rec.c;
用using的那种我这每代码了,假设这里的begin、end之间是内层:create or replace procedure P_VARCHAR2_LST_DYMANTIC(
i_name varchar2, --输入参数,要查询的name中包含的字符串
o_t_varchar OUT t_varchar, --输出参数,为定义的不定长varchar2数组
o_n_ret OUT number --输出参数,正常结束,则输出0,否则抛出异常
)
is
v_cur sys_refcursor; --定义一个游标变量
v_name T_VarcharArray.name%TYPE; --定义一个与T_VarcharArray表的name字段一样的类型的变量
v_sql varchar2(1000); --定义需要动态执行的sql语句
begin
--组织动态sql
--注意,在oracle的字符串常量中,两个''表示一个',即在'前再加一个'表示转义,与java中需要\来转义一样。
--单个的'需要如此,其他的特殊字符未做研究。另外,||表示连接两个常量字符串。
v_sql := 'select name from T_VarcharArray where name like ''%'||i_name||'%'''; --首先初始化一个空的字符串数组对象,此时o_t_varchar.COUNT=0;
o_t_varchar :=t_varchar();
--打开游标
open v_cur for v_sql;
loop
--把只有一个字段name的游标fetch到变量。
--如果是整个table的所有列,可以用%ROWTYPE来定义v_rec,接下来的系列中可能会用到,请注意。
fetch v_cur into v_name;
exit when v_cur%NOTFOUND; --这句紧接fetch,表示如果游标中没有值了,则退出该循环。
o_t_varchar.EXTEND; --数组扩展长度,第一次loop时,COUNT=1,以后依次+1;
o_t_varchar(o_t_varchar.COUNT):=v_name; --把v_name赋值给输出数组的最后一个元素。
end loop; --千万千万记得打开了的游标要关闭。除非你返回一个游标作为存储过程的输出参数或函数的输出值
close v_cur;
o_n_ret :=0;
exception when others then
raise;
end;
/
begin
for rec in (select a,b,c from x) loop
execute immediate 'select '||rec.a||' from '||rec.b||' where '||rec.c;
end loop;
end;
/
execute immediate str;
execute immediate 'insert into *** select语句';
不就完了?