不能直接这样写了,你是用游标还是into语句
因为在过程中是不能直接用select语句这样操作!
我想如果是游标的话就可以直接操作了,通过传递一个参数来解决!
如:
cursor c1 is select * from t_shoukp where p_cxh in (:CXH);
open c1(cxh);
因为在过程中是不能直接用select语句这样操作!
我想如果是游标的话就可以直接操作了,通过传递一个参数来解决!
如:
cursor c1 is select * from t_shoukp where p_cxh in (:CXH);
open c1(cxh);
解决方案 »
- RMAN 脚本学习
- 跪求CNOUG注册邀请码
- 用select如何通过行的索引进行操作?
- 请问怎么在archive mode下备份?
- Help! Oracle是否有方法从一个table向另一个table插入数据,但忽略重复数据,而只增加新数据?
- 帮我看一下这个分页存储过程有什么毛病?急啊……
- 问一个关于触发器的简单的问题
- 大虾们。怎么从ORACLE里的数据导出为XML文件和TXT文件
- oracle中建立数据库的sql语句时什么或者存储过程 ?谢谢!
- 请教高手 oracle9i for window2000 如何用命令行启动oracle服务?
- 游标中表名可以用变量吗?
- 知道表名,求所有与之相关对象的sql语句
现在是 他是在V_sql中!
cursor a is select * from t_kepdjdm;
CURSOR b is select * FROM t_chexdm;
v_sql1 varchar2(32767);
v_sql2 VARCHAR2(32765);
i number;begin
v_sql1:='create or replace view V_HCsptj as select a.P_cxh 航次,';
v_sql2:=' union select ''总计'' p_cxh,';
for a_temp in a loop
v_sql1:=v_sql1||' sum(decode(c.P_dj,'''||a_temp.P_kpdjdm||''',1,0)) '||a_temp.P_kpdj||',';
v_sql2:=v_sql2||' sum(sum(decode(c.P_dj,'''||a_temp.P_kpdjdm||''',1,0))) '||(a_temp.P_kpdj)||',';
end loop;
FOR b_temp IN b LOOP
v_sql1:=v_sql1||' sum(decode(b.P_cxdm,'''||b_temp.p_cxdm||''',1,0))'||b_temp.P_cx||',';
v_sql2:=v_sql2||' sum(sum(decode(b.P_cxdm,'''||b_temp.p_cxdm||''',1,0)))'||(b_temp.P_cx)||','; END LOOP;
v_sql1:=substr(v_sql1,1,length(v_sql1)-1)||' from t_chuanq a left join t_shoucp b ON b.P_CXH=a.P_CXH left join t_shoukp c ON c.P_CXH=a.P_CXH where a.p_cxh in ('|| cxh ||') group by a.P_cxh';
v_sql2:=substr(v_sql2,1,length(v_sql2)-1)||' from t_chuanq a left join t_shoucp b ON b.P_CXH=a.P_CXH left join t_shoukp c ON c.P_CXH=a.P_CXH where a.p_cxh in ('|| cxh ||') group by a.P_cxh';
v_sql1:=v_sql1|| v_sql2; instr(cxh,','||p_cxh||',')>0
execute immediate v_sql1;
end proc_demo; EXEC proc_demo('''DH010003','DH010004''');
我把全不代码都给你看看
/create or replace function strtab(p_str in varchar2)
return mytabletype
as
lstr varchar2(1000) default p_str||',';
ln number;
ldata mytabletype:=mytabletype();
begin
loop
ln:=instr(lstr,',');
exit when (nvl(ln,0)=0);
ldata.extend;
ldata(ldata.count):=ltrim(rtrim(substr(lstr,1,ln-1)));
lstr:=substr(lstr,ln+1);
end loop;
return ldata;
end;
/SQL> select * from table(cast(strtab('11,12,13') as mytabletype));COLUMN_VALUE
------------
11
12
13SQL> create table bb(id varchar2(2),name varchar2(10));Table createdSQL> insert into bb values('11','张三');1 row insertedSQL> insert into bb values('12','李四');1 row insertedSQL> insert into bb values('13','王五');1 row insertedSQL> select * from bb where id in (select * from table(cast(strtab('11,12,13') as mytabletype)));ID NAME
-- ----------
11 张三
12 李四
13 王五