pl/sql程序编写中遇到的一些问题及解决办法

来源:互联网 发布:温润如玉的男人知乎 编辑:程序博客网 时间:2024/05/16 11:56
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

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)


<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>