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...