Oracle PL SQL動態獲取變數

2021-08-10 13:41:27 字數 2903 閱讀 1921

假設有一張員工表fnd_employee有如下字段employee_id,name,email,phone四個字段, 然後我定義四個變數v1, v2, v3, v4 來存這四個字段(例: select * from fnd_employee into col1, col2, col3, col4 where rownum = 1)

那麼現在我假設要拿到這四個變數中不為空的變數的值,那麼我要怎麼做呢?

方法一:寫四個if…else 進行判斷

if v1 is not null then

...end if;

if v2 is not null then

...end if;

...

那麼如果有10個變數呢?有100個變數呢?不是要寫n多個判斷了嗎?那麼我要怎麼獲取這些變數比較方便快捷少寫**呢?我想了以下幾個方法。

方法二:用陣列來存這四個變數,然後用下標控制迴圈取得各個變數的值。

示例**

declare

--定義陣列型別下標型別為varchar2, 型別值為varchar2

type t_arr is table of varchar2(100) index

by varchar2(100);

v1 varchar2(100);

v2 varchar2(100);

v3 varchar2(100);

v4 varchar2(100);

vn t_arr;

v_index number := 1;

begin

select e.employee_id, e.name, e.email, e.phone into vn('1'), vn('2'), vn('3'), vn('4') from fnd_employee e where rownum = 1;

loop

exit when v_index > 4;

dbms_output.put_line(vn(to_char(v_index)));

v_index := v_index + 1;

endloop;

end;

簡單舉個栗子上述程式將值賦給陣列之後通過v_index陣列下標來迴圈取得預先賦值的列值。

方法三:將四個變數連線起來中間用特殊符號隔開,然後在迴圈利用正則分割變數取得相應的值。

示例程式

declare

v1 varchar2(100);

v2 varchar2(100);

v3 varchar2(100);

v4 varchar2(100);

v_s varchar2(1000);

v_index number := 1;

begin

select e.employee_id, e.name, e.email, e.phone into v1, v2, v3, v4 from fnd_employee e where rownum = 1;

--連線四個變數並用逗號隔開

v_s := v1 || ',' || v2 || ',' || v3 || ',' || v4;

loop

exit when v_index > 4;

--函式名 : regexp_substr(str , pattern, position, order)

--返回正則匹配的字串

--position是指開始匹配的位置,order是指匹配結果中的第幾個字串

dbms_output.put_line(regexp_substr(v_s, '[^,]+', 1, v_index));

v_index := v_index + 1;

endloop;

end;

這裡用迴圈控制 正則匹配到第v_index個變數的值

方法四:利用sql動態語句獲取相應的
declare

v1 varchar2(100);

v2 varchar2(100);

v3 varchar2(100);

v4 varchar2(100);

v_n varchar2(100);

v_sql varchar2(1000);

v_index number := 1;

begin

select e.employee_id, e.name, e.email, e.phone into v1, v2, v3, v4 from fnd_employee e where rownum = 1;

loop

exit

when v_index > 4;

v_sql := 'select v' || v_index || ' from (select :v1 v1, :v2 v2, :v3 v3, :v4 v4 from dual)';

execute immediate v_sql into v_n using v1, v2, v3, v4;

dbms_output.put_line(v_n);

v_index := v_index + 1;

endloop;

end;

這裡通過拼接sql語句然後動態執行獲取v1, v2, v3,v4 並將四個引數以繫結變數的方式傳入, 然後拼接sql,

用v_index來控制迴圈和取得的資料

OraclePL SQL儲存過程

create or replace 建立或替換,如果存在就替換,不存在就建立create or replace procedure piscursor cisselect from dept2 for update beginfor row record in c loopif row record...

Oracle pl sql基礎 迴圈

一 迴圈語法以及用法 1 loop的語法以及用法,如下 loop 處理程式 end loop 例子 declare v counter binary integer 1 定義變數 begin loop dbms output.put line v counter v counter v counte...

Oracle PL SQL異常處理

case語句語法格式如下 case 變數 when 表示式1 then 值1 when 表示式2 then 值2 when 表示式n then 值n else 值n 1 end 1 使用case語句寫乙個pl sql塊,要求輸入員工編號,根據員工的職位進行工資提公升,提公升要求如下 如果職位是cle...