你也沒給出個(gè)表名,臨時(shí)給你寫個(gè)例子,自己運(yùn)行看看結(jié)果吧
成都創(chuàng)新互聯(lián)一直秉承“誠(chéng)信做人,踏實(shí)做事”的原則,不欺瞞客戶,是我們最起碼的底線! 以服務(wù)為基礎(chǔ),以質(zhì)量求生存,以技術(shù)求發(fā)展,成交一個(gè)客戶多一個(gè)朋友!為您提供成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、成都網(wǎng)頁(yè)設(shè)計(jì)、成都微信小程序、成都網(wǎng)站開發(fā)、成都網(wǎng)站制作、成都軟件開發(fā)、APP應(yīng)用開發(fā)是成都本地專業(yè)的網(wǎng)站建設(shè)和網(wǎng)站設(shè)計(jì)公司,等你一起來見證!
建表
create table orders(oid varchar2(10),
price int);插入數(shù)據(jù)
insert into orders values ('1111',100);
insert into orders values ('1111',200);
insert into orders values ('2222',400);建立存儲(chǔ)過程
create or replace procedure p_orders
(v_oid varchar2)
as
v_count int;
v_pirce int;
begin
select count(*) into v_count from orders where oid=v_oid;
if v_count=0
then
dbms_output.put_line('訂單編號(hào)不存在');
else
select sum(price) into v_pirce from orders where oid=v_oid;
dbms_output.put_line('編號(hào)為'||v_oid||'的訂單金額為'||v_pirce);
end if;
end;
執(zhí)行1
begin
p_orders('3333');--括號(hào)里這個(gè)就是訂單編號(hào)
end;這個(gè)執(zhí)行結(jié)果是
執(zhí)行2
begin
p_orders('1111');--括號(hào)里這個(gè)就是訂單編號(hào)
end;
然后你自己再改改吧
創(chuàng)建含有輸入和輸出參數(shù)的存儲(chǔ)過程,該過程通過員工編號(hào)查找工資額,工資額以輸出參數(shù)返回
CREATE OR REPLACE PROCEDURE getSalaryByEmpNo(eNo
IN NUMBER,salary
OUT NUMBER)
AS
BEGIN
SELECT SAL INTO
salary FROM EMP WHERE EMPNO=eNo;
EXCEPTION
WHEN NO_DATA_FOUND THEN!
第一種:只讀。參數(shù)是只讀的,不能修改,即調(diào)用時(shí)傳遞進(jìn)來的是常量,或者變量(但變量不能在存儲(chǔ)過程中修改)。通常select及DML類型的存儲(chǔ)過程傳遞的是in類型的參數(shù)。
第二種:只寫。忽略調(diào)用語(yǔ)句傳遞的任何參數(shù),并在函數(shù)(過程)內(nèi)部給這些參數(shù)賦值,因此是只寫的。(這種情況是在函數(shù)或過程內(nèi)部給參數(shù)重新賦值,但重新賦值后的參數(shù)是無法被外部調(diào)用的(好像游標(biāo)類型的參數(shù)除外))
CREATE OR REPLACE? PROCEDURE "SCOTT"."SWAP" (firstValue out
number, secondValue out? number) is
temp number;
begin
temp := firstValue;
firstValue := secondValue;
secondValue := temp;
end swap;
外部調(diào)用:
set serveroutput on;
declare
firstVal number;
secondVal number;
begin
firstVal := 10;
secondVal := 20;
scott.swap(firstVal,secondVal);
dbms_output.put_line('first is ' || firstVal);
dbms_output.put_line('second is ' || secondVal);
end;
無法在外部訪問到firstValue與secondValue的值。此時(shí)打印出的結(jié)果為:
first is
second is
第三種:讀或?qū)?。這可以完全控制參數(shù),讀取傳遞的參數(shù)的值??梢栽俸瘮?shù)(過程)內(nèi)部修改參數(shù)的值,在退出函數(shù)(過程)后,這些參數(shù)被賦給在函數(shù)內(nèi)部寫入的值,這樣就可以返回多個(gè)值。(即入口參數(shù)寫入值后,可以傳遞到函數(shù)(過程)的外部,供外部調(diào)用的時(shí)候使用)
ps:函數(shù)中的返回值為如下幾種:
char; ?varchar2; number; integer; date; boolean; table; record
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 /
Procedure 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 procedure successfully completed.