[oracle]pl/sql,oracleplsql
這句sql可以用來查詢一張表中的特定位置的記錄
--查詢的方法擷取分頁的語句 select *from (select t1.*,rownum rn from (select *from books) t1 where rownum<=4) where rn >2;
--使用分頁寫預存程序
--1 首先要建立一個包,定義遊標類型
create or replace package fenyepackage as type fenye_cursor is ref cursor; end fenyepackage;
--2 主要的過程
create or replace procedure fenye( tablename in varchar2, --表名 pagesize in number, --每頁有多大 pagenow in number, --當前頁 myrows out number, --總共多少記錄 mypageconnt out number, --總共多少頁 l_cursor out fenyepackage.fenye_cursor --遊標 ) is --得到記錄的開始和結束的位置 v_begin number:=(pagenow-1)*pagesize+1; v_end number:=pagenow*pagesize; v_sql varchar(1000); begin v_sql:='select bookid,bookname,pubhouse from (select t1.*,rownum rn from (select *from '||tablename||') t1 where rownum<='||v_end||')where rn >='||v_begin; open l_cursor for v_sql; v_sql:='select count(*) from '||tablename; execute immediate v_sql into myrows; if mod(myrows,pagesize)=0 then mypageconnt:=myrows/pagesize; else mypageconnt:=myrows/pagesize+1; end if; --close l_cursor; end;
--3 使用procedure測試
create or replace procedure fenyeceshi( tablename in varchar2,pagesize in number,pagenow in number) is v_myrows number; v_mypagecount number; v_bookid books.bookid%type; v_bookname books.bookname%type; v_pubhouse books.pubhouse%type; l_cursor fenyepackage.fenye_cursor; begin fenye(tablename,pagesize,pagenow,v_myrows,v_mypagecount,l_cursor); --使用迴圈讀出特定頁的記錄 loop fetch l_cursor into v_bookid,v_bookname,v_pubhouse; --not found要連在一起寫 exit when l_cursor%notfound; dbms_output.put_line('圖書ID是:'||v_bookid||' 名稱是:'||v_bookname||' 出版社是'||v_pubhouse); end loop; dbms_output.put_line('總的記錄為:'||v_myrows||'條'); dbms_output.put_line('總的頁數為:'||v_mypagecount||'頁'); end;
SQL> exec fenyeceshi('books',2,2); 圖書ID是:3 名稱是:angle 出版社是20 圖書ID是:4 名稱是:anglele 出版社是10 總的記錄為:4條 總的頁數為:2頁 PL/SQL procedure successfully completed
??: 這樣是能得到結果,但是主過程中對於遊標是否關閉很疑惑
沒有關閉的情況下是正常的,關閉了的話會出錯
這個問題,待後面解決?
SQL> exec fenyeceshi('books',2,2); begin fenyeceshi('books',2,2); end; ORA-01001: 無效的遊標 ORA-06512: 在 "SCOTT.FENYECESHI", line 12 ORA-06512: 在 line 2
本文出自 “orangleliu筆記本” 部落格,請務必保留此出處http://blog.csdn.net/orangleliu/article/details/38309427
oracle pl/sql 問題
不是PLSQL的問題, 是 違反了表上得唯一約束;
你要麼把表上得唯一約束禁用掉,要麼給自己的程式加一個 意外控制
oracle pl/sql 怎刪除列
選中表--》選中欄位--》右鍵菜單-->drop