动态sql可以改成如下的形式
declare
sql varchar(4000);
begin
sql := 'select username,';
sql := sql || 'sum(decode(procductname,'|| '''' ||procedurtname||''''||' 1, 0)) as '||procedurtname||' from buyinfo group by username' ;
execute immediate sql;
end if;
declare
sql varchar(4000);
begin
sql := 'select username,';
sql := sql || 'sum(decode(procductname,'|| '''' ||procedurtname||''''||' 1, 0)) as '||procedurtname||' from buyinfo group by username' ;
execute immediate sql;
end if;
解决方案 »
- oracle安装后重启电脑不能使用
- 多个客户端频繁的操作同一表,导致速度慢的。怎么办
- 求 Oracle I-Learning 的开发资料
- 求助:关于RMAN脚本的问题
- imp 从A用户含有主键导入b 用户出错?如何处理???救命。。。
- 帮我看看树结构的SQL语句如何修改?
- 如何设置数据库是ARCHIVELOG还是NOARCHIVELOG
- 一个查询问题搞不定!!那位大虾帮帮我?
- select to_char(to_date(1234567,'j'),'Jsp') from dual;(整数转英文)
- 做一个报表,如何在原有的报表中增加一个项目,并且原有的表不变
- pl/sql developer的Debug菜单里的选项为什么总是灰色的?
- 关于if exists .... then ... else... sql 语句在oracle中能否实现的问题!
sql varchar(4000);
begin
sql := 'select username,';
sql := sql || 'sum(decode(procductname,'||procedurtname||', 1, 0)) procedurtname from buyinfo group by username' ;
execute immediate sql;
end;
/
请解释set @sql=left(@sql,len(@sql)-1)+'from buyinfo group by username'作用
动态sql可以改成如下的形式
declare
sql varchar(4000);
begin
sql := 'select username,';
sql := sql || 'sum(decode(procductname,'|| '''' || procedurtname || ''''||', 1, 0)) as '||procedurtname||' from buyinfo group by username' ;
execute immediate sql;
end ;
/
赋值,去掉了最后一个","错误提示:
Lastdrop(空杯) 必须说明标识符procedurtname
then 1 else 0 end) as '+procedurtname+',' from procduct
procedurtname是表procduct的字段。
我怎么声明?
select @sql=@sql+'sum(case when procductname='''+procedurtname+'''
then 1 else 0 end) as '+procedurtname+',' from procduct这句的作用是什么,MSSQL我也用过,这个好像有点不大明白。
最好变量设成v_procedurtname,容易区分,至于到了oracle编译为以上句法.
--select @sql=@sql+'sum(case when procductname='''+procedurtname+'''
-- then 1 else 0 end) as '+procedurtname+',' from procduct--这句的作用是什么,MSSQL我也用过,这个好像有点不大明白。这句的作用就是把
select 'sum(case when procductname='''+procedurtname+'''
then 1 else 0 end) as '+procedurtname+',' from procduct
出来的结果赋值给变量@sql.
declare
sql varchar(4000);
v_procedurtname varchar(255);
cursor pro_cur is select procedurtname from procduct;
begin
sql := 'select username ';
open pro_cur;
loop
fetch pro_cur into v_procedurtname;
exit when pro_cur%NOTFOUND;
sql := sql || ', sum(decode(procductname,'|| '''' ||
v_procedurtname || ''''||', 1, 0)) as '||v_procedurtname ;
end loop;
close pro_cur;
sql := sql || ' from buyinfo group by username' ;
execute immediate sql;
end ;
/