oracle存儲過程in條件查詢
A. oracle資料庫中in和=有什麼區別嗎,對於查詢的效率有什麼影響嗎,謝謝
in是對一個查老祥詢後結果集的操作,=是對單個欄位值的判斷,都是用於篩選,我者含猛想=快些,in畢竟還要執行首橋一個遍歷結果集
B. oracle存儲過程中循環for in是如何使用的
1、首先編寫存儲過程的整體結構,如下圖所示定義變數。
C. Oracle中如何寫帶條件的查詢存儲過程並返回查詢結果集
create or replace procere p_cnt(
p_time in varchar2,---查詢的條件
p_cur out SYS_REFCURSOR)---游標返回
IS
v_sql varchar2(1000) :='';
v_date varchar2(20);
BEGIN
v_date := replace(p_time, '-', '');---時間的格式轉換
v_sql := 'select * from dapartment d where d.d_time ='''|| v_date||'''';
END;
OPEN p_cur FOR v_sql;
END p_cnt;
D. oracle存儲過程條件查詢
--先在包裡面定義一個指針類型mycur供後續存儲過程使用
create or replace package PKG_STUDENT_OPEAR is
type mycur is ref cursor;
end PKG_STUDENT_OPEAR;
--定義存儲過程,裡面根據參數拼接sql語句,最終得到結果
create or replace procere query_temp(in_a in varchar2,
in_b in varchar2,
in_c in varchar2,
in_d in varchar2,
rescur out PKG_STUDENT_OPEAR.mycur) is
str_sql varchar2(500);
begin
str_sql := 'select tt.* from table tt where 1=1 ';
if in_a is not null or nvl(in_a, 'null') <> 'null' then
str_sql := str_sql || ' and tt.a = ''' || in_a || '''';
end if;
if in_b is not null or nvl(in_b, 'null') <> 'null' then
str_sql := str_sql || ' and tt.b = ''' || in_b || '''';
end if;
if in_c is not null or nvl(in_c, 'null') <> 'null' then
str_sql := str_sql || ' and tt.c = ''' || in_c || '''';
end if;
if in_d is not null or nvl(in_d, 'null') <> 'null' then
str_sql := str_sql || ' and tt.d = ''' || in_d || '''';
end if;
open rescur for str_sql;
end query_temp;
E. oracle存儲過程中循環for in是如何使用的
這樣使用的:
for
xx
in
(select
語句)
這是隱式游標,這個結構中不能帶參數,或者說普通的游標,隱式或顯式的都不能帶參數,使用參數游標或引用(動態)游標。
例如:
declare
cursor cur(C_value number) is select col_A,col_B from tableA where col_C=C_value
;
begin
for xx in cur loop
--處理
end loop;
end
(5)oracle存儲過程in條件查詢擴展閱讀:
注意事項
使用for循環實現
declare
cursor
cur
is
select
*
from
tablename;
aw_row
tablename%rowtype;
begin
for
raw_row
in
cur
loop
dbms_output.put_line('test');
end
loop;
end;
for語句直接幫做了游標的打開關閉,以及判斷工作,所以比較常用。
F. oracle存儲過程提問:oracle 用存儲過程將某一表裡符合條件的數據查出來之後,批量插入另一張表中
先把表創建起來,然後用insert語句插入。
create or replace procere P_Insert(v_date in varchar2,v_cp varchar2) is
begin
INSERT INTO ora201301 SELECT * FROM bh
WHERE 欄位名1 BETWEEN v_date||'/01' AND v_date||'/31' AND 欄位名2=v_cp;
COMMIT;
end P_Insert;
G. oracle 存儲過程中in條件傳參數
樓上的可以,不過有些語法錯誤,我改改,呵呵
---
create or replace procere pd1(p_1 number,p_2 number,p_3 number)
is
v_sql varchar2(4000);
begin
v_sql:='select * from table where id in('||p_1||','||p_2||','||p_3||')';
execute immediate v_sql;
end;
/