oracle RETURNING 子句使用方法
RETURNING自己通常结合DML语句使用。(INSERTUPDATEDELETE)
使用方法:
UPDATEtable_nameSETexpr1 RETURNINGcolumn_name INTOxxx
INSERT:返回的是添加后的值
UPDATE:返回时更新后的值
DELETE:返回删除前的值
RETURNING可以再sqlplus和plsql中使用
如果是plsql就如上面的代码,xxx为声明的变量名
如果是sqlplus,xxx可以为变量,即
VARIABLEvar_namevarchar2(10) UPDATEtable_nameSETexpr1 RETURNINGcolumn_nameINTO:var_name;
这里的:var_name使用的是绑定变量
另外,RETURNING貌似可以与RETURN通用
INSERTINTOVALUES支持RETURNING
INSERTINTOSELECT、和MERGE语句不支持RETURNING
例子1:
建表语句:
CREATETABLETEST111( A1VARCHAR(10), A2VARCHAR(20) ); CREATESEQUENCETEST111_S1 STARTWITH1 INCREMENTBY1 CACHE20 MAXVALUE999999999999999999999999999 CYCLE;
DECLARE SEQNUMBER; BEGIN INSERTINTOTEST111VALUES(TEST111_S1.NEXTVAL,'AAA2') RETURNINGA1INTOSEQ; DBMS_OUTPUT.PUT_LINE(SEQ); END; DECLARE SEQNUMBER; BEGIN INSERTINTOTEST111VALUES(TEST111_S1.NEXTVAL,'AAA3'); SELECTTEST111_S1.CURRVALINTOSEQFROMDUAL; COMMIT; DBMS_OUTPUT.PUT_LINE(SEQ); END;
例子2:
再另外,RETURNING可以与BULKCOLLECT结合(批量绑定,另外一个是FORALL)
DECLARE TYPEtable_typeISTABLEOFcolumn_name%TYPE; v_tabtable_type; BEGIN UPDATEtable_name SETexpr1 RETURNINGcolumn_nameBULKCOLLECTINTOv_tab; FORiINv_tab.first..v_tab.lastLOOP DBMS_OUTPUT.put_line(l_tab(i)); ENDLOOP; COMMIT; END;
ORA-06547:INSERT,UPDATE或DELETE语句必须使用RETURNING子句
产生这个错误的原因:
returninginto子句作用于insert,update,delete,上而select则不行,应该用into。
报错的存储如下:
createorreplaceprocedurep_stu_info(s_idnumber,s_namevarchar2)is
v_namevarchar2(10);
v_agenumber;
v_ErrMsgvarchar2(200);
begin
executeimmediate'selectname,agefromstudent_testwhereid=:1andname=:2'
usings_id,s_name
returningintov_name,v_age;
dbms_output.put_line(v_name||'的年龄为:'||to_char(v_age));
exception
whenothersthen
v_ErrMsg:=SUBSTRB(SQLERRM,1,200);
dbms_output.put_line('找不到相应学生');
endp_stu_info;
改成下面这样就ok了:
createorreplaceprocedurep_stu_info(s_idnumber,s_namevarchar2)is
v_namevarchar2(10);
v_agenumber;
v_ErrMsgvarchar2(200);
begin
executeimmediate'selectname,agefromstudent_testwhereid=:1andname=:2'
intov_name,v_age
usings_id,s_name;
dbms_output.put_line(v_name||'的年龄为:'||to_char(v_age));
exception
whenothersthen
v_ErrMsg:=SUBSTRB(SQLERRM,1,200);
dbms_output.put_line('找不到相应学生,错误原因:'||v_ErrMsg);
endp_stu_info;热门推荐
10 对患者生日祝福语简短
11 结婚祝福语简短装备
12 周岁祝福语学生文案简短
13 订婚领证祝福语简短精辟
14 导师获奖祝福语大全简短
15 新婚购房祝福语简短精辟
16 牛年祝福语简短的爱人
17 送芒果的祝福语简短
18 送给学长毕业祝福语简短