pl/sql程式設計方法大全
一、動態sql的拼接(使用replace)
www.2cto.com
注意使用replace替換達到動態sql拼接的效果,v_psql可做變數傳遞
[plain]
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 過程已成功完成。
二、通用的分隔函式 www.2cto.com
[sql]
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 12
aaqwwq
null
三、取得當前函式或儲存過程的名稱(一般用於錯誤處理)
[sql]
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; 用法
[sql]
create or replace procedure p_test
as
ex_p01 exception;
...
begin
...
exception
when ex_p01 then
raise_application_error(-20001,
'在' || 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程式設計方法大全
一 動態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 ...
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...