CREATE OR REPLACE PROCEDURE GetNewJb1
(startrq DATE,
endrq DATE,
jxlb IN OUT CHAR)
AS
BEGIN
DELETE FROM newjb1;
jxlb:='';
INSERT INTO NewJb1(jxlb,lbmc,trans_head,col01,col02,col03,col04,
col05,col06,col07,col08,col09,col10,col11,col12,col13,col14,
col15,col16,col17,col18,col19,col20_H,col20,col21_H,
col21,col22_H,col22,col23_H,col23,col24_H,col24,col25_H,col25)
SELECT
jxlb,lbmc,trans_head,SUM(col01),SUM(col02),SUM(col03),SUM(col04),
SUM(col05),SUM(col06),SUM(col07),SUM(col08),SUM(col09),
SUM(col10),SUM(col11),SUM(col12),SUM(col13),SUM(col14),
SUM(col15),SUM(col16),SUM(col17),SUM(col18),
SUM(col19),SUM(col20_H),SUM(col20),SUM(col21_H),
SUM(col21),SUM(col22_H),SUM(col22),SUM(col23_H),
SUM(col23),SUM(col24_H),SUM(col24),SUM(col25_H),
SUM(col25)
FROM NewJb1Rj
GROUP BY jxlb,lbmc,trans_head
ORDER BY jxlb,trans_head;
END;
(startrq DATE,
endrq DATE,
jxlb IN OUT CHAR)
AS
BEGIN
DELETE FROM newjb1;
jxlb:='';
INSERT INTO NewJb1(jxlb,lbmc,trans_head,col01,col02,col03,col04,
col05,col06,col07,col08,col09,col10,col11,col12,col13,col14,
col15,col16,col17,col18,col19,col20_H,col20,col21_H,
col21,col22_H,col22,col23_H,col23,col24_H,col24,col25_H,col25)
SELECT
jxlb,lbmc,trans_head,SUM(col01),SUM(col02),SUM(col03),SUM(col04),
SUM(col05),SUM(col06),SUM(col07),SUM(col08),SUM(col09),
SUM(col10),SUM(col11),SUM(col12),SUM(col13),SUM(col14),
SUM(col15),SUM(col16),SUM(col17),SUM(col18),
SUM(col19),SUM(col20_H),SUM(col20),SUM(col21_H),
SUM(col21),SUM(col22_H),SUM(col22),SUM(col23_H),
SUM(col23),SUM(col24_H),SUM(col24),SUM(col25_H),
SUM(col25)
FROM NewJb1Rj
GROUP BY jxlb,lbmc,trans_head
ORDER BY jxlb,trans_head;
END;
解决方案 »
- oracle中有关记录类型的
- Oracle高手请进~~
- 删除ORACLE用户后,空间不释放的问题
- 哪位兄第有 USERENV函数,userenv名称空间,名称空间,sys_context的详细相关解释数据或请帮忙讲解!
- 用 sqlplus 连接,都是用什么身份登陆的?normal,dba?
- 数据库不能启动 请帮忙 急!
- Oracle9i安装问题
- 怎样用SQL语句或其它方法抓出一个存储过程或触发器的编写内容等
- 有谁用过veritas备份oracle数据库
- 想咨询一个关于oracle检查约束与唯一约束联用的问题
- 从Oracle网站下载的Oracle企业版,有没有时间或功能上的限制???
- 不同版本导入DMP的问题
order by 的地方出错了,
如果没有这句就正确
怎么加上这个就不行了??
update NewJb1 set col19_h=case
when col06 is null then 0
when col06=0 then 0
else round((col19/col06)*100,1)
end,
col20_h=case
when col06 is null then 0
when col06=0 then 0
else round((col20/col06)*100,1)
end,
col21_h=case
when col06 is null then 0
when col06=0 then 0
else round((col21/col06)*100,1)
end,
col22_h=case
when col06 is null then 0
when col06=0 then 0
else round((col22/col06)*100,1)
end,
col23_h=case
when col06 is null then 0
when col06=0 then 0
else round((col23/col06)*100,1)
end,
col24_h=case
when col06 is null then 0
when col06=0 then 0
else round((col24/col06)*100,1)
end,
col25_h=case
when col06 is null then 0
when col06=0 then 0
else round((col25/col06)*100,1)
end最后我想执行
select * from NewJb1
那位兄弟来指导一下,
第一次在ORALCE下写SP
还不太懂,
还望指教一二
col20_h=decode(col06,null,0,0,0,round((col20/col06)*100,1)),
col21_h=decode(col06,null,0,0,0,round((col21/col06)*100,1)),
col22_h=decode(col06,null,0,0,0,round((col22/col06)*100,1)),
col23_h=decode(col06,null,0,0,0,round((col23/col06)*100,1)),
col24_h=decode(col06,null,0,0,0,round((col24/col06)*100,1)),
col25_h=decode(col06,null,0,0,0,round((col25/col06)*100,1))
询时加上order by也就行了。2. 你的update语句在Oracle8i以上版本是支持的,若不支持可以改为decode函数。
col19_h=case
when col06 is null then 0
when col06=0 then 0
else round((col19/col06)*100,1)
end
decode函数形式 col19_h=decode(col06,null,0,0,0,round((col19/col06)*100,1))3."最后我想执行select * from NewJb1"什么意思?在procedure中执行吗?那你得用游标,如果你想把select的结果输出还要用ref cursor.....,有很多类似的帖子。
(startrq date,endrq date,jxlb in out char)
as
begin
delete from newjb1;
if jxlb is null then
jxlb:='';
end if; insert into NewJb1(jxlb,lbmc,trans_head,col01,col02,col03,col04,
col05,col06,col07,col08,col09,col10,col11,col12,col13,col14,
col15,col16,col17,col18,col19,col20_H,col20,col21_H,
col21,col22_H,col22,col23_H,col23,col24_H,col24,col25_H,col25)
select
jxlb,lbmc,trans_head,sum(col01),sum(col02),sum(col03),sum(col04),
sum(col05),sum(col06),sum(col07),sum(col08),sum(col09),
sum(col10),sum(col11),sum(col12),sum(col13),sum(col14),
sum(col15),sum(col16),sum(col17),sum(col18),
sum(col19),sum(col20_H),sum(col20),sum(col21_H),
sum(col21),sum(col22_H),sum(col22),sum(col23_H),
sum(col23),sum(col24_H),sum(col24),sum(col25_H),
sum(col25) from NewJb1Rj
where jxlb=jxlb and tjrq>=startrq and tjrq<=endrq
group by jxlb,lbmc,trans_head;
update NewJb1 set col19=col20+col21+col22+col23+col24+col25;
update NewJb1 set col07=col08+col09+col10+col11+col12+col13+col14+col15;
update NewJb1 set col06=col07+col17+col18+col19 ;
update NewJb1 set col01=col02+col03+col05+col06-col04 ;
update NewJb1 set col19_h=decode(col06,null,0,0,0,round((col19/col06)*100,1));
update NewJb1 set col20_h=decode(col06,null,0,0,0,round((col20/col06)*100,1));
update NewJb1 set col21_h=decode(col06,null,0,0,0,round((col21/col06)*100,1));
update NewJb1 set col22_h=decode(col06,null,0,0,0,round((col22/col06)*100,1));
update NewJb1 set col23_h=decode(col06,null,0,0,0,round((col23/col06)*100,1));
update NewJb1 set col24_h=decode(col06,null,0,0,0,round((col24/col06)*100,1));
update NewJb1 set col25_h=decode(col06,null,0,0,0,round((col25/col06)*100,1)); declare cursor Cur_NewJb1 is select * from NewJb1;
v_NewJb1 Cur_NewJb1%ROWTYPe;
begin
open Cur_NewJb1 ;
loop
fetch cuR_NewJb1 into v_NewJb1;
exit when Cur_NewJb1%notfound;
dbms_output.put_line(V_NewJb1.jxlb,V_lbmc);/*这个地方有什么办法把newjb1中所有字段全输出,不要一个个写*/
end loop;
close Cur_NewJb1;
commit;
end;
grant all on getnewjb1 to public/*为什么加上这句就出错误了*/
end;
/
SQL> execute getnewjb1('01-04-03','01-04-03','N');
BEGIN getnewjb1('01-04-03','01-04-03','N'); END; *
ERROR 位于第1行:
ORA-06550: 第 1 行, 第 39 列:
PLS-00363: 表达式 'N' 不能用作赋值目标
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
create or replace procedure GetNewJb1
(startrq date,endrq date,jxlb in out char)中,jxlb是输入输出参数,你使用常量当然不行了。在SQL*PLUS中执行下面的语句
declare
jxlb char(1) :='N';
begin
getnewjb1('01-04-03','01-04-03',jxlb);
end;
/
getnewjb1('01-4月-03','01-4月-03',jxlb);
的日期格式才行啊?
传01-04-2003就报错
为什么我写在上面的就是不正确呢?
而且我上面写的那个游标还没有任何的返回集
怎么才能有呢?
将getnewjb1('01-04-03','01-04-03',jxlb);改为
getnewjb1(to_date('01-04-03','yy-mm-dd'),to_date('01-04-03','yy-mm-dd'),jxlb);2.grant all on getnewjb1 to public应该是DBA用户或system用户才可以执行吧!
3. 要是想在SQL*PLUS中看到dbms_output.put_line打出的信息,要先在SQL*PLUS中执行set serveroutput on