ORACLE 動態執行SQL語句

2021-06-18 01:24:08 字數 2696 閱讀 8648

oracle 動態sql

oracle 動態sql有兩種寫法:用 dbms_sql 或 execute immediate,建議使用後者。試驗步驟如下:

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:='測試人員';

v_2:='北京';

str := 'insert into test (name ,address) values (:1, :2)';

execute immediate str using v_1, v_2;

commit;

end;

2. 返回單條結果

declare

str varchar2(500);  

c_1 varchar2(10);  

r_1 test%rowtype;  

begin

c_1:='測試人員';  

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. 返回結果集

create

orreplace package pkg_test as

/* 定義ref cursor型別  

不加return型別,為弱型別,允許動態sql查詢,  

否則為強型別,無法使用動態sql查詢;  

*/  

type myrctype is ref cursor;  

--函式申明

function get(intid number) return myrctype;  

end pkg_test;  

/  create

orreplace package body pkg_test as

--函式體

function get(intid number) return myrctype is

rc myrctype; --定義ref cursor變數

sqlstr varchar2(500);  

begin

if intid=0 then

--靜態測試,直接用select語句直接返回結果

open rc for

select id,name,***,address,postcode,birthday from

student;  

else

--動態sql賦值,用:w_id來申明該變數從外部獲得

sqlstr := 'select id,name,***,address,postcode,birthday from student  

where id=:w_id';  

open rc for sqlstr using intid;  

end if;  

return rc;  

end get;  

end pkg_test;  

------------------------

改寫:建立:

create or replace package my_cursor

astype out_cursor is ref cursor;

end;

create or replace procedure test_proc

(intid in int, --定義輸入引數

rt out my_cursor.out_cursor) is --定義輸出引數

sqlstr varchar2(2000); --宣告變數

begin

if intid=0 then

open rt for select site_id,sitename from s_site;--輸出

else

sqlstr := 'select site_id,sitename from s_site where site_id ='||intid;

open rt for sqlstr;

end if;

end;

呼叫:

declare 

intid number;

rt my_cursor.out_cursor;

begin

intid := 0;

rt := null;

ebsig_lecake.test_proc ( intid, rt );

commit;

end;

ORACLE 動態執行SQL語句

oracle 動態sql oracle 動態sql有兩種寫法 用 dbms sql 或 execute immediate,建議使用後者。試驗步驟如下 1.ddl 和 dml sql ddl begin execute immediate drop table temp 1 execute imme...

ORACLE 動態執行SQL語句

部落格分類 sql oracle cc c oracle 動態sql oracle 動態sql有兩種寫法 用 dbms sql 或 execute immediate,建議使用後者。試驗步驟如下 1.ddl 和 dml sql ddl begin execute immediate drop tab...

Oracle動態SQL語句

在使用odp.net進行oracle程式設計時,有時候sql語句非常複雜,需要採用動態構造查詢語句的情況,有兩種方法可以構造動態的sql語句,並執行返回結果集。1 在資料訪問層構造sql語句 例如下面的語句,將構造完整的sql語句賦值給commandtext,再傳遞到資料庫進行執行,返回結果集。lo...