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

2021-04-12 17:36:05 字數 2126 閱讀 6928

oracle

動態sql

有兩種寫法:用

dbms_sql

或execute immediate

,建議使用後者。試驗步驟如下:

1. ddldml

/*** 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'; 

--動態測試,用

sqlstr

字串返回結果,用

using

open rc for sqlstr using intid; 

end if; 

return rc; 

end get; 

end pkg_test; 

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

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

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

動態SQL中返回數值

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