oralce儲存過程使用動態sql

2021-08-30 13:08:21 字數 1741 閱讀 6833

在儲存過程中,我想根據條件拼裝sql,這個時候select xx into v_xx這樣就不行了,返回不了值。要使用

execute immediate v_sql into v_access_number;
create or replace procedure p_access_user

( v_starttime in varchar2,

v_endtime in varchar2,

v_adjusttype in varchar2,

v_results in varchar2,

v_province in varchar2,

v_access_number out adjust_power_transaction_his.id%type

) is

v_char_16 varchar2(20);

v_char_two_16 varchar2(20);

v_like varchar2(20000);

v_sql varchar2(25000):='select count(*)from adjust_power_transaction_his t where 1=1 ';

begin

--時間段

if(v_starttime is not null and v_endtime is not null) then

v_sql:=v_sql||' and t.begintime>= to_date('''||v_starttime||''',''yyyy-mm-dd hh24:mi:ss'')'||'and t.begintime<=to_date('''||v_endtime||''',''yyyy-mm-dd hh24:mi:ss'')';

end if;

--校準方式

if(v_adjusttype is not null)then

v_sql:=v_sql||' and t.adjusttype='||v_adjusttype||'';

end if;

--校準處理結果

if(v_results is not null)then

v_sql:=v_sql||' and t.result= '''||v_results||'''';

end if;

--省份

if(v_province is not null)then

select to_char(v_province,'***') into v_char_16 from dual;

if length(trim(v_char_16)) = 1

then

v_char_two_16 :='0'||trim(v_char_16);

else

v_char_two_16 := trim(v_char_16);

end if;

v_like := upper('01'||v_char_two_16||'%');

v_sql:=v_sql||' and t.cardno like'''|| v_like||'''';

end if;

--接入使用者統計

execute immediate v_sql into v_access_number;

--dbms_output.put_line(v_sql);

end p_access_user;

oralce中儲存過程 Insert

create or replace procedure insert user information p user login name in varchar2,p user password in varchar2,p user name in varchar2,p user telephone...

oralce儲存過程的作用

定義 儲存過程 stored procedure 是一組為了完成特定功能的sql 語句 集,經編譯後儲存在資料庫中。使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它。儲存過程是資料庫中的乙個重要 物件,任何乙個設計良好的資料庫應用程式都應該用到儲存過程。儲存過程是由流控制和s...

oralce儲存過程的基本語法

1.基本結構 create or replace procedure 儲存過程名字 引數1 in number,引數2 in number is 變數1 integer 0 變數2 date begin end 儲存過程名字 2.select into statement 將select查詢的結果存...