Oracle 動態SQL返回單條結果和結果集

2021-09-08 02:58:44 字數 1770 閱讀 2630

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 or replace package pkg_test as 

/* 定義ref cursor型別 

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

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

*/ type myrctype is ref cursor; 

--函式申明 

function get(intid number) return myrctype; 

end pkg_test;  / 

create or replace 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;  /

Oracle 動態SQL返回單條結果和結果集

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

Oracle 動態SQL返回單條結果和結果集

oracle 動態sql返回單條結果和結果集 1.ddl 和 dml ddl begin execute immediate drop table temp 1 execute immediate create table temp 1 name varchar2 8 end dml declare...

動態SQL中返回數值

最近在做乙個paypal抓取資料的程式,由於所有欄位和paypal之間存在對應對映的關係,所以所有的sql語句必須得拼接傳到儲存過程裡去執行,alter proc dbo sp common paypal addinfo paypalsql varchar max 不包含使用者表的paypalsql...