Oracle存儲(chǔ)過程使用動(dòng)態(tài)SQL
作者:佚名 
  Oracle存儲(chǔ)過程中應(yīng)該如何使用動(dòng)態(tài)SQL呢?這是很多人都提到過的問題。下文對(duì)Oracle存儲(chǔ)過程使用動(dòng)態(tài)SQL的方法作了詳盡的闡述,供您參考。
 Oracle存儲(chǔ)過程 相信大家都比較了解,下面就為您介紹Oracle存儲(chǔ)過程使用動(dòng)態(tài)SQL的方法,希望對(duì)您能夠有所幫助。
Oracle存儲(chǔ)過程使用動(dòng)態(tài)SQL 有兩種寫法:用 DBMS_SQL 或 execute immediate,建議使用后者。試驗(yàn)步驟如下:
1. DDL和DML
- /*** DDL ***/
 - begin
 - EXECUTE IMMEDIATE 'drop table temp_1';
 - EXECUTE IMMEDIATE 'create table temp_1(name varchar2(8))';
 - end;
 - /*** DML ***/
 - declare
 - v_1 varchar2(8);
 - v_2 varchar2(10);
 - str varchar2(50);
 - begin
 - v_1:='測(cè)試人員';
 - v_2:='北京';
 - str := 'INSERT INTO test (name ,address) VALUES (:1, :2)';
 - EXECUTE IMMEDIATE str USING v_1, v_2;
 - commit;
 - end;
 
2. 返回單條結(jié)果
- declare
 - str varchar2(500);
 - c_1 varchar2(10);
 - r_1 test%rowtype;
 - begin
 - c_1:='測(cè)試人員';
 - str:='select * from test where name=:c WHERE ROWNUM=1';
 - execute immediate str into r_1 using c_1;
 - DBMS_OUTPUT.PUT_LINE(R_1.NAME||R_1.ADDRESS);
 - end ;
 
3. 返回結(jié)果集
- CREATE OR REPLACE package pkg_test as
 - /* 定義ref cursor類型
 - 不加return類型,為弱類型,允許動(dòng)態(tài)sql查詢,
 - 否則為強(qiáng)類型,無法使用動(dòng)態(tài)sql查詢;
 - */
 - type myrctype is ref cursor;
 - --函數(shù)申明
 - function get(intID number) return myrctype;
 - end pkg_test;
 - /
 - CREATE OR REPLACE package body pkg_test as
 - --函數(shù)體
 - function get(intID number) return myrctype is
 - rc myrctype; --定義ref cursor變量
 - sqlstr varchar2(500);
 - begin
 - if intID=0 then
 - --靜態(tài)測(cè)試,直接用select語句直接返回結(jié)果
 - open rc for select id,name,sex,address,postcode,birthday from
 - student;
 - else
 - --動(dòng)態(tài)sql賦值,用:w_id來申明該變量從外部獲得
 - sqlstr := 'select id,name,sex,address,postcode,birthday from student
 - where id=:w_id';
 - --動(dòng)態(tài)測(cè)試,用sqlstr字符串返回結(jié)果,用using關(guān)鍵詞傳遞參數(shù)
 - open rc for sqlstr using intid;
 - end if;
 - return rc;
 - end get;
 - end pkg_test;
 - /
 
【編輯推薦】
責(zé)任編輯:段燃 
                    來源:
                    互聯(lián)網(wǎng)
 














 
 
 
 
 
 
 