假設有一張員工表那麼現在我假設要拿到這四個變數中不為空的變數的值,那麼我要怎麼做呢?fnd_employee
有如下字段employee_id
,name
,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...