oracle存儲過程拼接sql
㈠ 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;
㈡ oracle 利用存儲過程循環執行sql語句
你的需求不需要使用存儲過程的,一個簡單的聚合函數就能實現吧。
用存儲過程反而麻煩,你想用的話,可以學習一下pl/sql相關的內容。
㈢ 關於oracle存儲過程中的sql拼接,大神進!!!
procere proc_test(
in_id in varchar2,
out_sum out varchar2
) as
begin
execute immediate 'select count(*) from table_name '||in_id into out_sum;
end;
/
sqlplus里調用時:
var out_sum varchar2(10)
exec package_name.proc_test('where id=''XXX'' or 1=1',:out_sum)
print out_sum
㈣ oracle存儲過程中如何執行動態SQL語句 詳細�0�3
有時需要在oracle 存儲過程中執行動態SQL 語句 ,例如表名是動態的,或欄位是動態的,
或查詢命令是動態的,可用下面的方法:
set serveroutput ondeclaren number;sql_stmt varchar2(50);
t varchar2(20);beginexecute immediate 'alter session set nls_date_format=''YYYYMMDD''';
t := 't_' || sysdate;
sql_stmt := 'select count(*) from ' || t;
execute immediate sql_stmt into n;
dbms_output.put_line('The number of rows of ' || t || ' is ' || n);end;
如果動態SQL 語句 很長很復雜,則可用包裝.
CREATE OR REPLACE PACKAGE test_pkgISTYPE cur_typ IS REF CURSOR;
PROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ);END;/
CREATE OR REPLACE PACKAGE BODY test_pkgISPROCEDURE test_proc (v_table VARCHAR2,t_cur OUT cur_typ)ISsqlstr VARCHAR2(2000);BEGINsqlstr := 'SELECT * FROM '||v_table;
OPEN t_cur FOR sqlstr;END;END;/
在oracle 中批量導入,導出和刪除表名以某些字元開頭的表
spool c:\a.sql
㈤ oracle存儲過程中如何執行動態SQL語句 詳細
有時需要在oracle
存儲過程中執行動態SQL
語句
,例如表名是動態的,或欄位是動態的,
或查詢命令是動態的,可用下面的方法:
set
serveroutput
ondeclaren
number;sql_stmt
varchar2(50);
t
varchar2(20);beginexecute
immediate
'alter
session
set
nls_date_format=''YYYYMMDD''';
t
:=
't_'
||
sysdate;
sql_stmt
:=
'select
count(*)
from
'
||
t;
execute
immediate
sql_stmt
into
n;
dbms_output.put_line('The
number
of
rows
of
'
||
t
||
'
is
'
||
n);end;
如果動態SQL
語句
很長很復雜,則可用包裝.
CREATE
OR
REPLACE
PACKAGE
test_pkgISTYPE
cur_typ
IS
REF
CURSOR;
PROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ);END;/
CREATE
OR
REPLACE
PACKAGE
BODY
test_pkgISPROCEDURE
test_proc
(v_table
VARCHAR2,t_cur
OUT
cur_typ)ISsqlstr
VARCHAR2(2000);BEGINsqlstr
:=
'SELECT
*
FROM
'||v_table;
OPEN
t_cur
FOR
sqlstr;END;END;/
在oracle
中批量導入,導出和刪除表名以某些字元開頭的表
spool
c:\a.sql
㈥ Oracle [存儲過程] 執行動態拼接SQL語句並返回結果
建議你用 instr函數,v_sql條件改為
where instr(p_jbm,t.jbm)>0試試吧。
㈦ Oracle 怎麼把存儲過程傳過來的參數拼接成
給你一個 傳遞參數的例子
SQL> CREATE OR REPLACE PROCEDURE HelloWorld2 (
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5 ) AS
6 BEGIN
7 dbms_output.put_line('Hello ' || p_user_name || p_inout_val || '!');
8 p_out_val := 'A';
9 p_inout_val := 'B';
10 END HelloWorld2;
11 /
Procere created.
SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10) := '~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval=' || p_outval);
8 dbms_output.put_line('p_inoutval=' || p_inoutval);
9 END;
10 /
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procere successfully completed.
SQL>
㈧ 在oracle 存儲過程中,動態創建臨時表後,執行一段很長的insert 語句,應該怎麼弄呢
通過拼接sql語句賦給變數如v_sql
然後再用execute immediate v_sql執行即可實現。
㈨ java調用oracle存儲過程 關於sql裡面in函數參數的問題
調用存儲過程是java 把組合起來的字元串傳到資料庫後台操作,如果你in ( pkStagesPersonArray),傳到資料庫後台還是 in ( pkStagesPersonArray) 而非你想要的 in('1330251','1336140' )所以你應該把pkStagesPersonArray 裡面的內容轉換成 '1330251','1336140' 再拼接起來