oracle_DBMS_SQL應用

來源:互聯網
上載者:User

 今天沒什麼事,就研究了一下DBMS_SQL,下面是我網上剛剛搜集的資料,寫下來吧。

 

DBMS_SQL封裝過程中的主要函數:
1、OPEN_CURSOR:返回新遊標的ID值
2、PARSE:解析要執行的語句
3、BIND_VARIABLE:將給定的數量與特定的變數相串連
4、DEFINE_COLOUMN:定義欄位變數,其值對應於指定遊標中某個位置元素的值 (僅用於SELECT語句)
5、EXECUTE:執行指定的遊標
6、EXECUTE_AND_FETCH:執行指定的遊標並取記錄
7、FETCH_ROWS:從指定的遊標中取出記錄
8、COLUMN_VALUE:返回遊標中指定位置的元素
9、IS_OPEN:當指定的遊標狀態為OPEN時返回真值
10、CLOSE_CURSOR:關閉指定的遊標並釋放記憶體
11、LAST_ERROR_POSITION:返回出錯SQL語句的位元組位移量
12、LAST_ROW_ID:返回最後一條記錄的ROWID
13、LAST_SQL_FUNCTION_CODE:返回語句的SQL FUNCTION CODE

例1:

--這是一個建立一個表的過程的例子。該過程有兩個參數:表名和欄位及其類型的列表。<br />CREATE OR REPLACE PROCEDURE ddlproc (tablename varchar2, cols varchar2) AS<br />   cursor1 INTEGER;<br />BEGIN<br />   cursor1 := dbms_sql.open_cursor;<br />   dbms_sql.parse(cursor1, 'CREATE TABLE ' tablename ' ( ' cols ' )', dbms_sql.v7);<br />   dbms_sql.close_cursor(cursor1);<br />end;

 

例2:

--用DBMS_SQL包和遊標計算使用者下所有表行數<br />DECLARE<br /> t_c1_tname user_tables.table_name%TYPE;<br /> t_command varchar2(200);<br /> t_cid integer;<br /> t_total_records number(10);<br /> stat integer;<br /> row_count integer;<br /> t_limit integer := 0; --限制只取出記錄大於0的表的情況</p><p> cursor c1 is select table_name from user_tables order by table_name; --查出所有表的名字<br />BEGIN<br /> t_limit := 0;<br /> open c1;</p><p> loop<br /> fetch c1 into t_c1_tname; --取出一個表名<br /> exit when c1%NOTFOUND; --如果遊標記錄取完,退出迴圈<br /> t_command := 'SELECT COUNT(0) FROM '||t_c1_tname; --定義SQL命令<br /> t_cid := DBMS_SQL.OPEN_CURSOR; --建立一個遊標<br /> DBMS_SQL.PARSE(t_cid,t_command,dbms_sql.native); --向伺服器發出一個語句並檢查這個語句的文法和語義錯誤<br /> DBMS_SQL.DEFINE_COLUMN(t_cid,1,t_total_records); --定義將從FetchRows()函數接收資料的變數的資料類型與大小<br /> stat := DBMS_SQL.EXECUTE(t_cid); --執行此語句,因為執行的是查詢,所以必須跟著Fetch_Rows函數並為單個行檢索資料<br /> row_count := DBMS_SQL.FETCH_ROWS(t_cid); --取回一行資料放入局部緩衝區<br /> DBMS_SQL.COLUMN_VALUE(t_cid,1,t_total_records); --返回調用FetchRows()取回的一列的值,這一列的值儲存在t_total_records中</p><p> if t_total_records > t_limit then<br /> DBMS_OUTPUT.PUT_LINE(rpad(t_c1_tname,55,' ')||<br /> to_char(t_total_records,'99999999')||' record(s)');<br /> end if;</p><p> DBMS_SQL.CLOSE_CURSOR(t_cid);<br /> end loop;</p><p> close c1;<br />END;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.