oracle存儲過程默認參數
⑴ oracle 存儲過程為什麼要有參數啊
http://hi..com/wangqing999/blog/item/0991d3124070854420a4e9b4.html
Oracle 存儲過程 的例子代碼.
關於 參數 IN/OUT 參數默認值 指定特定參數的情況 , 都有相應的例子。
⑵ oracle 存儲過程 參數
在過程頭中再定義一個out參數,在代碼exception的部分將輸出賦給這個out參數即可
⑶ oracle帶輸入參數的存儲過程
sql">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;
⑷ 存儲過程輸入參數設置默認值問題
問題補充:如果例中,動作=「入庫」 ; 日期 的默認值應該設置多少? 你在存儲過程里,給這個參數一個默認值就ok了。 這里應該有三個參數吧,
⑸ oracle 存儲過程怎麼參數
幫你修了一下,updatesql沒看,欄位類型也不知道,你可能細微處要修一下,並且注意下面幾項;prcere中,select要注意into賦值,就是我給你加得p_1,p_2,p_3,p_4,p_5你自己注意一下數據類型,select出來的東西是不能直接用的,要先賦值
⑹ ORACLE存儲過程帶默認值的參數怎麼處理
CREATE OR REPLACE PROCEDURE SELECTEMP(P_EMPNO IN NUMBER DEFAULT 7369) AS
V_ENAME EMP.ENAME%TYPE;
BEGIN
SELECT E.ENAME INTO V_ENAME FROM EMP E WHERE E.EMPNO=P_EMPNO;
DBMS_OUTPUT.put_line(V_ENAME);
END SELECTEMP;
BEGIN
SELECTEMP(7499);
END;
BEGIN
SELECTEMP();--默認參數值
END;
⑺ oracle 存儲過程參數的問題
方案1:
(1)傳入前將單位拼接為串,格式如下:『單位1,單位2,單位3',即'43,4301',用逗號分割數據。
(2)查詢條件修改如下:
where instr(傳入的串,單位所在列)>0;
(3)注意 單位這個列不能有空的情況,否則需要加上nvl(單位,『@』),字元可以自擬;
方案2:傳入前將復選後的單位放入PL/SQL表,再將PL/SQL表作為參數進行傳遞;
如果復選的不是很大,沒有超過varchar2(4000)的話,方案1能實現。注意對參數最好加限制substrb(單位串,1,你期望的限制),這個限制可依據性能而定,一般復選框也不會一頁顯式太多,所以不必擔心串的大小。
⑻ sql存儲過程參數可省略嗎 存儲過程中參數都有默認值,調用時可不可以不傳參數呢
可以,默認參數放存儲過程後面,等調用的時候,默認參數不填就可以直接運行了
⑼ 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';