oracle帶輸入參數的存儲過程
❶ oracle怎麼調用帶參數的存儲過程
sqlplus或者PL/SQL SQL窗口輸入(單獨調用存儲過程):無參數EXEC 過程名;或者BEGIN過程名END; IN 參數EXEC 過程名(入參數..);或者BEGIN過程名(入參數...)END; OUT參數,IN OUT參數variable 綁定變數名 數據類型; //定義一個變數接收出參數的值;EXEC 過程名(:綁定變數名);
❷ Oracle 求一存儲過程帶輸入輸出參數 並且調用的實例
下面的例子代碼, 僅僅用於演示 in out , 沒有任何資料庫檢索的處理。
註:
Oracle的INOUT寫在變數名後面。
SQL>(
2p_user_nameINVARCHAR2,
3p_out_valOUTVARCHAR2,
4p_inout_valINOUTVARCHAR2
5)AS
6BEGIN
7dbms_output.put_line('Hello'||p_user_name||p_inout_val||'!');
8p_out_val:='A';
9p_inout_val:='B';
10ENDHelloWorld2;
11/
Procerecreated.
SQL>DECLARE
2p_outvalVARCHAR2(10);
3p_inoutvalVARCHAR2(10):='~Hi~';
4BEGIN
5HelloWorld2('Edward',p_outval,p_inoutval);
6
7dbms_output.put_line('p_outval='||p_outval);
8dbms_output.put_line('p_inoutval='||p_inoutval);
9END;
10/
HelloEdward~Hi~!
p_outval=A
p_inoutval=B
PL/.
SQL>
❸ oracle存儲過程的輸入參數和輸出參數
是的,無論是輸入的參數還是輸出的參數,在此過程中都視為一個參數,所以一般情況下對應你定義的參數類型和個數帶入,便可調用。
❹ 可否幫我舉一個oracle的存儲過程 並且要帶輸入輸出參數 還有如何調用的語句
reate or replace procere get_content_river(cxrq in varchar2,--查詢日期
fsr in varchar2,--發送人自動發送寫自動發送
content out varchar2,
bz out varchar2,--0為失敗1為成功
msg out varchar2) is
v_zm varchar2(50);
v_xzqy varchar2(20);
v_xzbm varchar2(20);
n_jjsw number(10,3);
n_bzsw number(10,3);
v_type varchar2(2);
cursor cur_st_river_r(cxsj varchar2)is
select *
from st_river_r
where substr(to_char(st_river_r.ymdhm,'yyyy-mm-dd'),1,10) = cxsj;
rec_st_river_r st_river_r%rowtype;
begin
msg:='';
content:='';
bz := '1';
v_type := '1';--默認為人工
open cur_st_river_r(cxrq);
loop
fetch cur_st_river_r into rec_st_river_r;
exit when cur_st_river_r%notfound;
--取得警戒水位\保證水位
begin
select cshct.alwtlv,cshct.gnwtlv into n_jjsw,n_bzsw from CSHCT where cshct.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
n_jjsw :=0;
n_bzsw :=0;
end;
--判斷
if n_jjsw <= rec_st_river_r.zr then
--取得站名
begin
select prnmsr.ennm into v_zm from prnmsr where prnmsr.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
v_zm :='無';
end;
--行政區域編碼
begin
select DSEN.DSCD into v_xzbm from dsen where dsen.ennmcd = rec_st_river_r.ennmcd;
exception
when others then
v_xzbm :='無';
end;
--取得行政區域名稱
begin
select DSCDNM.DSNM into v_xzqy from dscdnm where dscdnm.dscd = v_xzbm;
exception
when others then
v_xzqy := '無';
end;
content:= content||'報警站名稱:'||v_zm||';'||'行政區名稱:'||v_xzqy||';'||'當前水位:'||to_char(rec_st_river_r.zr)||';'
||'警戒水位:'||n_jjsw||';'||'保證水位:'||n_bzsw||';';
end if;
end loop;
if fsr = '自動發送' then
v_type := '2';
end if;
if length(content)> 0 then
--插入簡訊記錄表 message
insert into message(
ID,
CONTENT,
SENDDATE,
REPLY,
PERSON,
TYPE,
CONTENTTYPE)
values
(
seq_message.nextval,
content,
sysdate,
'2',
fsr,
v_type,
'2'
);
end if;
close cur_st_river_r;
exception
when others then
if cur_st_river_r%isopen then
close cur_st_river_r;
bz := 0;
end if;
content := '-1';
msg := SQLERRM;
❺ oracle帶輸入參數的存儲過程
createorreplaceproceresp_test(iv_yinvarchar2,iv_minvarchar2)
as
v_countinteger;
begin
selectcount(*)intov_countfromtable_testwhereyear=iv_yandmonth=iv_m;
ifv_count>0then
Raise_Application_Error(-20001,'數據已存在!');
else
insertintotable_testvalues(iv_y,iv_m);
commit;
endif;
end;
❻ Oracle存儲過程的帶參存儲過程
模式描述IN參數(默認模式)(輸入參數)用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,給此參數傳遞的值可以是常量、有值的變數、表達式等。OUT參數(輸出參數)用來從過程中返回值給調用者,不能將此參數的值賦給另一個變數,不能是常量或表達式。在過程體內,必須給OUT參數賦值。INOUT參數(輸入輸出參數)既可以從調用者向過程中傳遞值,執行過程後還可返回可能改變了的值給調用者。 模式描述IN參數(默認模式)(輸入參數)用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,給此參數傳遞的值可以是常量、有值的變數、表達式等。OUT參數(輸出參數)用來從過程中返回值給調用者,不能將此參數的值賦給另一個變數,不能是常量或表達式。在過程體內,必須給OUT參數賦值。INOUT參數(輸入輸出參數)既可以從調用者向過程中傳遞值,執行過程後還可返回可能改變了的值給調用者。模式
描述
用來從調用環境中向存儲過程傳遞值,不能給IN參數賦值,
給此參數傳遞的值可以是常量、有值的變數、表達式等。
用來從過程中返回值給調用者,不能將此參數的值賦給另
一個變數,不能是常量或表達式。在過程體內,必須給
OUT參數賦值。
既可以從調用者向過程中傳遞值,執行過程後還可返回可能
改變了的值給調用者。 如果形式參數是IN模式的參數,實際參數可以是一個具體的值或一個有值的變數;如果形式參數是OUT模式的參數,實際參數必須是一個變數,當調用過程後,此變數就被賦值了。可以輸出此變數的值來測試過程執行的結果。如果形式參數是INOUT模式的參數,則實際參數必須是一個預先已經賦值的變數。執行完過程後,該變數被重新賦值,可以輸出此變數的值來測試過程執行結果。
❼ oracle中怎麼讓帶有輸入參數的存儲過程定時執行
兩種方法
1。oracle中有 [作業] 功能,創建一個作業,然後,設置定時執行。
2。用系統的[定時任務],定一個時間,然後調用bat文件,從bat中調用oracle的存儲過程。
❽ oracle中怎麼執行帶有輸出參數的存儲過程,在程序中我知道怎麼調用,
1、新建一個存儲過程(Procere)。
❾ Oracle存儲過程及舉例(幾種參數情況的存儲
create table TESTTABLE
(
id1 VARCHAR2(12),
name VARCHAR2(32)
)
select t.id1,t.name from TESTTABLE t
insert into TESTTABLE (ID1, NAME)
values ('1', 'zhangsan');
insert into TESTTABLE (ID1, NAME)
values ('2', 'lisi');
insert into TESTTABLE (ID1, NAME)
values ('3', 'wangwu');
insert into TESTTABLE (ID1, NAME)
values ('4', 'xiaoliu');
insert into TESTTABLE (ID1, NAME)
values ('5', 'laowu');
---創建存儲過程
create or replace procere test_count
as
v_total number(1);
begin
select count(*) into v_total from TESTTABLE;
DBMS_OUTPUT.put_line('總人數:'||v_total);
end;
--准備
--線對scott解鎖:alter user scott account unlock;
--應為存儲過程是在scott用戶下。還要給scott賦予密碼
---alter user scott identified by tiger;
---去命令下執行
EXECUTE test_count;
----在ql/spl中的sql中執行
begin
-- Call the procere
test_count;
end;
create or replace procere TEST_LIST
AS
---是用游標
CURSOR test_cursor IS select t.id1,t.name from TESTTABLE t;
begin
for Test_record IN test_cursor loop---遍歷游標,在列印出來
DBMS_OUTPUT.put_line(Test_record.id1||Test_record.name);
END LOOP;
test_count;--同時執行另外一個存儲過程(TEST_LIST中包含存儲過程test_count)
end;
-----執行存儲過程TEST_LIST
begin
TEST_LIST;
END;
---存儲過程的參數
---IN 定義一個輸入參數變數,用於傳遞參數給存儲過程
--OUT 定義一個輸出參數變數,用於從存儲過程獲取數據
---IN OUT 定義一個輸入、輸出參數變數,兼有以上兩者的功能
--這三種參數只能說明類型,不需要說明具體長度 比如 varchar2(12),defaul 可以不寫,但是作為一個程序員最好還是寫上。
---創建有參數的存儲過程
create or replace procere test_param(p_id1 in VARCHAR2 default '0')
as v_name varchar2(32);
begin
select t.name into v_name from TESTTABLE t where t.id1=p_id1;
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----執行存儲過程
begin
test_param('1');
end;
default '0'
---創建有參數的存儲過程
create or replace procere test_paramout(v_name OUT VARCHAR2 )
as
begin
select name into v_name from TESTTABLE where id1='1';
DBMS_OUTPUT.put_line('name:'||v_name);
end;
----執行存儲過程
DECLARE
v_name VARCHAR2(32);
BEGIN
test_paramout(v_name);
DBMS_OUTPUT.PUT_LINE('name:'||v_name);
END;
-------IN OUT
---創建存儲過程
create or replace procere test_paramINOUT(p_phonenumber in out varchar2)
as
begin
p_phonenumber:='0571-'||p_phonenumber;
end;
----
DECLARE
p_phonenumber VARCHAR2(32);
BEGIN
p_phonenumber:='26731092';
test_paramINOUT(p_phonenumber);
DBMS_OUTPUT.PUT_LINE('新的電話號碼:'||p_phonenumber);
END;
-----sql命令下,查詢當前用戶的存儲過程或函數的源代碼,
-----可以通過對USER_SOURCE數據字典視圖的查詢得到。USER_SOURCE的結構如下:
SQL> DESCRIBE USER_SOURCE ;
Name Type Nullable Default Comments
---- -------------- -------- -------
-------------------------------------------------------------------------------------------------------------
NAME VARCHAR2(30) Y Name of the object
TYPE VARCHAR2(12) Y Type of the object: "TYPE", "TYPE BODY", "PROCEDURE", "FUNCTION",
"PACKAGE", "PACKAGE BODY" or "JAVA SOURCE"
LINE NUMBER Y Line number of this line of
source
TEXT VARCHAR2(4000) Y Source text
SQL>
---查詢出存儲過程的定義語句
select text from user_source WHERE NAME='TEST_COUNT';
----查詢存儲過程test_paramINOUT的參數
SQL> DESCRIBE test_paramINOUT;
Parameter Type Mode Default?
------------- -------- ------ --------
P_PHONENUMBER VARCHAR2 IN OUT
SQL>
---查看當前的存儲過程的狀態是否正確,
---VALID為正確,INVALID表示存儲過程無效或需要重新編譯
SELECT STATUS FROM USER_OBJECTS WHERE OBJECT_NAME='TEST_COUNT';
-----如果要檢查存儲過程或函數的依賴性,可以通過查詢數據字典USER_DENPENDENCIES來確定,該表結構如下:
SQL> DESCRIBE USER_DEPENDENCIES;
Name Type Nullable Default Comments
-------------------- ------------- -------- ------- ----------------------------------------------------------
NAME VARCHAR2(30) Name of the object
TYPE VARCHAR2(17) Y Type of the object
REFERENCED_OWNER VARCHAR2(30) Y Owner of referenced object (remote owner if remote object)
REFERENCED_NAME VARCHAR2(64) Y Name of referenced object
REFERENCED_TYPE VARCHAR2(17) Y Type of referenced object
REFERENCED_LINK_NAME VARCHAR2(128) Y Name of dblink if this is a remote object
SCHEMAID NUMBER Y
DEPENDENCY_TYPE VARCHAR2(4) Y
SQL>
---查詢存儲過程TEST_COUNT的依賴關系
SELECT REFERENCED_NAME,REFERENCED_TYPE FROM USER_DEPENDENCIES WHERE NAME='TEST_COUNT';