PL SQL程式設計方法大全

2021-08-27 06:03:24 字數 2882 閱讀 2706

一、動態sql的拼接(使用replace)

注意使用replace替換達到動態sql拼接的效果,v_psql可做變數傳遞

1  declare

2 a number:=2;

3 v_sql varchar2(4000):='select ename from #';

4 v_psql varchar2(2000):='emp where rownum='||2||' ';

5 begin

6 dbms_output.put_line(v_psql);

7 v_sql:=replace(v_sql,'#',v_psql);

8 dbms_output.put_line(v_sql);

9* end;

sql> /

emp where rownum=2

select ename from emp where rownum=2

pl/sql 過程已成功完成。

二、通用的分隔函式(varchar2版本)

create or replace function split

( p_string varchar2,

p_sep varchar2 := ',' --預設按逗號分隔

) return type_split pipelined --pipelined關鍵字指定返回結果集使用管道輸出,輸出為表型別

is v_l pls_integer;

v_string varchar2(30000) := p_string;

begin

loop

v_l := instr(v_string,p_sep);

if v_l > 0 then

pipe row(substr(v_string,1,v_l-1)); --使用管道函式

v_string := substr(v_string,v_l+length(p_sep));

else

pipe row(v_string);

exit;

end if;

end loop;

return;

end split;

用之前記得建立乙個pl/sql表型別用來儲存輸出的結果:

create or replace type type_split is table of varchar2(1000)

用法:

select * from table(split('12,aa,qwwq,',','));

結果column_value

12aa

qwwq

null

通用的分隔函式(clob版本):

create or replace function splitclob(p_string    in clob,

p_delimiter in varchar2)

return type_split

pipelined as

v_length number;

v_start number := 1;

v_index number;

begin

v_length := dbms_lob.getlength(p_string);

while (v_start <= v_length) loop

v_index := dbms_lob.instr(p_string, p_delimiter, v_start);

if v_index = 0 then

pipe row(dbms_lob.substr(p_string, v_length - 1, v_start));

v_start := v_length + 1;

else

pipe row(dbms_lob.substr(p_string, v_index - v_start, v_start));

v_start := v_index + 1;

end if;

end loop;

return;

end splitclob;

用法同上,唯一要注意的是要建立clob陣列來儲存輸出:

create or replace type type_split is table of clob

三、取得當前函式或儲存過程的名稱(一般用於錯誤處理)

create or replace function f_getprocname return varchar2

--獲取函式或者儲存過程自身的名稱及呼叫者

is l_owner varchar2(30);

l_name varchar2(30);

l_lineno number;

l_type varchar2(30);

begin

owa_util.who_called_me(l_owner, l_name, l_lineno, l_type);

return l_owner || '.' || l_name;

end;

用法

create or replace procedure p_test

a***_p01 exception;

...begin

...exception

when ex_p01 then

'在' || f_getprocname || '中出現錯誤:('||sqlcode||')--'||sqlerrm||',請檢查!');

...end p_test;

PL SQL程式設計方法大全

一 動態sql的拼接 使用replace 注意使用replace替換達到動態sql拼接的效果,v psql可做變數傳遞 1 declare 2 a number 2 3 v sql varchar2 4000 select ename from 4 v psql varchar2 2000 emp ...

PL SQL程式設計方法大全

pl sql程式設計方法大全 一 動態sql的拼接 使用replace www.2cto.com 注意使用replace替換達到動態sql拼接的效果,v psql可做變數傳遞 plain 1 declare 2 a number 2 3 v sql varchar2 4000 select enam...

PLSQL程式設計

create table emomy1 emon varchar2 100 time1 date drop table emomy1 select from emomy1 begin dbms output.put line hello,world end 定義變數 declare name con...