亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您好,請問存儲過程如果參數沒有in和out代表的是什么?如下所示

您好,請問存儲過程如果參數沒有in和out代表的是什么?如下所示

達令說 2021-11-18 15:11:30
PROCEDURE pro_Payment_Audit(pBU number,pRegion number,pBILLDATE char,pResult out varchar2)ASbegin
查看完整描述

1 回答

?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

oracle 存儲過程in out inout三種參數模式

oracle過程中定義了in|out|in out3中參數模式,每個參數可以選擇其一
in 是參數的默認模式,這種模式就是在程序運行的時候已經具有值,在程序體中值不會改變。
舉個例子
create or replace procedure update_price(
p_product_id in NUMBER,
p_factor in NUMBER)
AS
.....
你在引用這個過程的時候給參數傳入值
exexute update_price(2,2.5);
這是定義的2個參數就得到了值,in模式下值不能變

out模式定義的參數只能在過程體內部賦值,表示該參數可以將某個值傳遞回調用他的過程
in out 表示高參數可以向該過程中傳遞值,也可以將某個值傳出去
簡單的說in參數就是傳入但存儲過程里面處理的參數
out參數就是返回值的參數。
in參數就像c++語言里函數一般的參數那樣
而out函數就像c++里函數的引用類型參數一樣
不知道我比喻是否正確,請高手指點
create or replace procedure gettest2(stdname in varchar2,p_cursor in out types.mytype)
as
begin
open p_cursor for select * from test where name=stdname;
end;
例如上面的存儲過程
stdname是in參數,傳進去供查詢語句使用
p_cursor是 out參數,返回查詢的結果集

--------------------------------------------------------------------------------------------------------------------

oracle 存儲過程 in out2009-08-11 16:30
創建過程語法:

create [or replace] procedure procedure_name
[ (argment [ { in| in out }] type,
argment [ { in | out | in out } ] type
{ is | as }
<類型.變量的說明>
( 注: 不用 declare 語句 )
Begin
<執行部分>
exception
<可選的異常處理說明>
end;

l 這里的IN表示向存儲過程傳遞參數,OUT表示從存儲過程返回參數。而IN OUT 表示傳遞參數和返回參數;
l 在存儲過程內的變量類型只能指定變量類型;不能指定長度;
l 在AS或IS 后聲明要用到的變量名稱和變量類型及長度;
l 在AS或IS 后聲明變量不要加declare 語句。

例1.

CREATE OR REPLACE PROCEDURE ModeTest (
p_InParameter IN NUMBER,
p_OutParameter OUT NUMBER,
p_InOutParameter IN OUT NUMBER) IS

v_LocalVariable NUMBER;

BEGIN

v_LocalVariable := p_InParameter; -- Legal

p_InParameter := 7; -- Illegal

p_OutParameter := 7; -- Legal

v_LocalVariable := p_outParameter; -- Illegal

v_LocalVariable := p_InOutParameter; -- Legal

p_InOutParameter := 7; -- Legal
END ModeTest;
/

§16.2.2 使用過程
存儲過程建立完成后,只要通過授權,用戶就可以在SQLPLUS 、Oracle開發工具或第三方開發工具來調用運行。Oracle使用EXECUTE 語句來實現對存儲過程的調用。

EXEC[UTE] procedure_name( parameter1, parameter2…);

例:
CREATE PACKAGE emp_data AS
TYPE EmpRecTyp IS RECORD (
emp_id NUMBER(4),
emp_name VARCHAR2(10),
job_title VARCHAR2(9),
dept_name VARCHAR2(14),
dept_loc VARCHAR2(13));
TYPE EmpCurTyp IS REF CURSOR RETURN EmpRecTyp;
PROCEDURE get_staff (
dept_no IN NUMBER,
emp_cv IN OUT EmpCurTyp);
END;
/
CREATE PACKAGE BODY emp_data AS
PROCEDURE get_staff (
dept_no IN NUMBER,
emp_cv IN OUT EmpCurTyp) IS
BEGIN
OPEN emp_cv FOR
SELECT empno, ename, job, dname, loc FROM emp, dept
WHERE emp.deptno = dept_no AND emp.deptno = dept.deptno
ORDER BY empno;
END;
END;
/
COLUMN EMPNO HEADING Number
COLUMN ENAME HEADING Name
COLUMN JOB HEADING JobTitle
COLUMN DNAME HEADING Department
COLUMN LOC HEADING Location
SET AUTOPRINT ON
VARIABLE cv REFCURSOR
EXECUTE emp_data.get_staff(20, :cv)

-----------------------------------
PROMPT

oracle 用 prompt實現打印功能,多用于提示信息。輸入命令prompt tablename1;
標準輸出為tablename1
PROMPT 告訴SQL*Plus 在屏幕上書寫一行文字。你在這里使用了兩個PROMPT命令;每個命令都在屏幕上打印一個空行,這對于垂直間距很有好處。ACCEPT命令是等待用戶輸入一個置換變量的值。ACCEPT命令中可選的PROMPT 子句在用戶輸入數值的同一行中顯示了一條信息。你在PL/SQL 塊的外面放置PROMPT 和 ACCEPT 是正確的:他們是SQL*Plus 命令,不是PL/SQL 。



查看完整回答
反對 回復 2021-11-23
  • 1 回答
  • 0 關注
  • 546 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號