pl/sql程序编写中遇到的一些问题及解决办法
2008-04-26 21:36
926 查看
1、在pl/sql中,orderby子句中的条件可以使用变量!
DECLARE
v_orderbystrVARCHAR2(30);
v_useridVARCHAR2(30);
v_usernameVARCHAR2(30);
v_genderNUMBER;
v_rownumNUMBER;
TYPEtcurISREFCURSOR;
resultstcur;
BEGIN
v_rownum:=0;
v_orderbystr:='username';
OPENresultsFORselectuserId,userName,gender from
(selectROWNUMASrowno,a.*from
(select*fromhome_userorderbyv_orderbystr)a
whererownum<10)
whererowno>=1;
LOOP
FETCHresultsINTOv_userid,v_username,v_gender;
EXITWHENresults%NOTFOUND;
dbms_output.put_line(v_userid||''||v_username||''||v_gender);
v_rownum:=v_rownum+1;
ENDLOOP;
CLOSEresults;
dbms_output.put_line(v_rownum);
END;
2、而在写动态sql的存储过程中,发现在使用using子句时,发现不能把表名作为占位符的参数!而只能通过下边的办法来替代,即直接将表名与字符串相连,其他的变量则可以被占位符来替代;
v_sqlStr:='SELECT*FROM(SELECTrownumrowno,t.*FROM'
||'(SELECTsequenceidmsgId,themeid,Id,topic,hits,replys,nickname'
||'FROM'||tablename||'WHEREthemeid=:a2ORDERBY:a3)tWHERErownum<:a4'
||')WHERErowno>=:a5';
dbms_output.put_line(v_sqlStr);
OPENo_resultsFORv_sqlStrUSINGp_themeId,v_OrderByStr,v_endRow,v_startRow;
3、在做一些翻页查询时,使用了伪列rownum,发现rownum只能用于rownum<10之类的应用,而不能是rownum>10;上例中实现了同时翻页的功能;
4、利用已经存在的表建立一个新表,并复制源表的表结构:
CREATETABLE newTable as(select*oldTablewhere1=2)
DECLARE
v_orderbystrVARCHAR2(30);
v_useridVARCHAR2(30);
v_usernameVARCHAR2(30);
v_genderNUMBER;
v_rownumNUMBER;
TYPEtcurISREFCURSOR;
resultstcur;
BEGIN
v_rownum:=0;
v_orderbystr:='username';
OPENresultsFORselectuserId,userName,gender from
(selectROWNUMASrowno,a.*from
(select*fromhome_userorderbyv_orderbystr)a
whererownum<10)
whererowno>=1;
LOOP
FETCHresultsINTOv_userid,v_username,v_gender;
EXITWHENresults%NOTFOUND;
dbms_output.put_line(v_userid||''||v_username||''||v_gender);
v_rownum:=v_rownum+1;
ENDLOOP;
CLOSEresults;
dbms_output.put_line(v_rownum);
END;
2、而在写动态sql的存储过程中,发现在使用using子句时,发现不能把表名作为占位符的参数!而只能通过下边的办法来替代,即直接将表名与字符串相连,其他的变量则可以被占位符来替代;
v_sqlStr:='SELECT*FROM(SELECTrownumrowno,t.*FROM'
||'(SELECTsequenceidmsgId,themeid,Id,topic,hits,replys,nickname'
||'FROM'||tablename||'WHEREthemeid=:a2ORDERBY:a3)tWHERErownum<:a4'
||')WHERErowno>=:a5';
dbms_output.put_line(v_sqlStr);
OPENo_resultsFORv_sqlStrUSINGp_themeId,v_OrderByStr,v_endRow,v_startRow;
3、在做一些翻页查询时,使用了伪列rownum,发现rownum只能用于rownum<10之类的应用,而不能是rownum>10;上例中实现了同时翻页的功能;
4、利用已经存在的表建立一个新表,并复制源表的表结构:
CREATETABLE newTable as(select*oldTablewhere1=2)
相关文章推荐
- 基于.net compact framework 2.0,C#开发windows mobile 5.0程序遇到的一些问题及解决办法
- 卸载SQL2008遇到问题(重启计算机失败、找不到SQL卸载程序)的解决办法
- MyEclipse遇到的一些问题解决办法
- 写Paper排版遇到的一些问题的解决办法
- python3.x中lambda表达式遇到的一些问题以及解决办法
- 项目适配iOS9遇到的一些问题及解决办法(持续 c0f3 更新)
- 写PL/SQL程序时碰到的一些问题
- PL/SQL Developer中,存储过程无法调试的问题解决办法
- 利用pl/sql developer进行远程连接oracle server出现的问题及解决办法
- 430单片机仿真器MSP-FETU430IF遇到VCP问题不能下载程序解决办法详解
- Matlab保存图像过程中遇到的问题和一些解决办法
- Android studio 安装中遇到一些问题的解决办法,分享一下
- 最近oracle开发中遇到的一些问题及解决办法(二)待续
- Eclipse遇到的一些问题,和对应的解决办法
- win10+visual studio2015编写python,引用beautifulsoup包遇到的一点问题和解决办法
- 11.29编程中遇到的一些问题以及解决办法
- *c#在64位上编写32位程序时注册表重定向的问题解决办法**
- 搭载LNMP时遇到的一些小问题及解决办法
- 项目适配iOS9遇到的一些问题及解决办法
- SQL Server WAITFOR Delay 使用变量遇到的问题和解决办法