如何把这个sql语句写成存储过程?

andywzw 2004-10-27 05:31:54
以下这个代码中, lBrandID,lLanguageID,lCategoryID均为从前一个页面传递进来的变量,我这个大语句主要实现从上一个页面的点击查询产品子类的时候生成页面的sql,由于现在数据量很大,每次点击都要消耗很长时间的查询,因此我想以存储过程实现,但是我不知道如何写,另外,这种想法是否成熟?请高手给与解答,并且能写出存储过程,谢谢!


select Distinct products.id,nvl(products.SSIXDIGITCODE,'000000') sku,
products.sname,products.sdesc,products.NDMPRICE,NBEANS,npri,
CODEDESC.SNAME dawei,NBRANDID,NBEANSPROMOTION,NDMPRICEPROMOTION,
0 mPrice,-1 nSaleID,products.NEXCHANGEHALLID nDefaultProductLine,0 nIsInCabinet,
2 nIsOutOfStock,0 mMinQuantity,1 fInvQty,1 fAllocateQty,
1 fInvSafeQty,0 mMinQuantity, NCLOBDETAILS,NBLOBIMGBIG,NBLOBIMGSMALL
from products,CODEDESC
where NBRANDID =1
and products.NUNITID = CODEDESC.id(+) and CODEDESC.NCODETYPEID=20 and CODEDESC.NLANGUAGEID=1
and products.nstatusid=1
and products.nlockid=1
and products.nSaleID=1
and products.NLANGUAGEID =1
and products.NDMPRICE > 0
and products.npri > 0
and products.id not in
( select NPRODUCTID from DMCATEGORYPRODUCT where NCATEGORYID = 1 )
...全文
216 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
andywzw 2004-10-29
  • 打赏
  • 举报
回复
如何从后台查询到我从web查询的spid呢?
liuyi8903 2004-10-29
  • 打赏
  • 举报
回复
你用游标来返回结果集吧!
bzszp 2004-10-28
  • 打赏
  • 举报
回复
存储过程返回结果集需要用ref cursor

例如:
需要写一个包:
create or replace package pag_cs_power as

type c_Type is ref cursor;

FUNCTION FUN_CS_GETDICTLIST(
v_DictIndex in varchar2) return c_Type;

end pag_cs_power;

存储过程代码:

FUNCTION FUN_CS_GETDICTLIST(
v_DictIndex in varchar2) return c_Type
as
c_cursor c_Type;
begin
open c_cursor for
select DICTID,DICTNAME FROM SYS_DICT WHERE DICTINDEX = v_DictIndex;
return c_cursor;
end FUN_CS_GETDICTLIST;
andywzw 2004-10-28
  • 打赏
  • 举报
回复
to bzszp(SongZip) :
用ref cursor

你查一下论坛中 关于 “结果集” 的贴子。

您这个我没明白什么意思?
bzszp 2004-10-28
  • 打赏
  • 举报
回复
"安全性考虑,CSDN目前版本取消可用分捐赠功能。下一版本我们会提供一个新的积分评价体系。"

现在不能捐赠可用分了。

没法帮你了。
bzszp 2004-10-28
  • 打赏
  • 举报
回复
用ref cursor

你查一下论坛中 关于 “结果集” 的贴子。
andywzw 2004-10-28
  • 打赏
  • 举报
回复
对啊,我的可用份越来越少了,担心成了0分我就没法问问题了
andywzw 2004-10-28
  • 打赏
  • 举报
回复
bzszp(SongZip) 这个部分我已经改写好了,看来我们想到一起了。但是我还是想用存储过程实现,因为我们以前人写的代码很乱,都在jsp中,现在既然回过头优化,我就想变成存储过程。
bzszp 2004-10-28
  • 打赏
  • 举报
回复
可能是你以前有3个贴子被系统强制结贴了吧

“而且我得分越来越少了”--是可用分吧?


分析一下查询条件中的内容,如果某个条件在所有行中所占的比例比较小,就给它创建索引。
zhaokeke2004 2004-10-28
  • 打赏
  • 举报
回复
同意楼上
andywzw 2004-10-28
  • 打赏
  • 举报
回复
bzszp(SongZip) 我结分很及时,怎么信誉值成了97了,而且我得分越来越少了,怎么增加?不会那天成了0分不能问问题了吧
bzszp 2004-10-28
  • 打赏
  • 举报
回复
try:
修改最后一行
and products.id not in
( select NPRODUCTID from DMCATEGORYPRODUCT where NCATEGORYID = 1 )

and not exists
( select 1 from DMCATEGORYPRODUCT where NCATEGORYID = 1 and
products.id=nproductid);
andywzw 2004-10-28
  • 打赏
  • 举报
回复
那我怎么办呢?
lialin 2004-10-27
  • 打赏
  • 举报
回复
查找一下这个语句的执行计划,然后针对性进行优化或许就没有这个问题了!
bzszp 2004-10-27
  • 打赏
  • 举报
回复
用存储过程也不一定能提高查询速度。

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧