您的位置:首页 > 数据库

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: