日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oracle语句怎么倒退,oracle RETURNING 子句使用方法

發布時間:2025/3/20 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle语句怎么倒退,oracle RETURNING 子句使用方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

RETURNING 自己通常結合DML 語句使用。(INSERT UPDATE DELETE)

使用方法:

UPDATE table_name SET expr1

RETURNING column_name

INTO xxx

INSERT: 返回的是添加后的值

UPDATE:返回時更新后的值

DELETE:返回刪除前的值

RETURNING 可以再sqlplus 和plsql中使用

如果是plsql就如上面的代碼,xxx為聲明的變量名

如果是sqlplus,xxx 可以為變量,即

VARIABLE var_name varchar2(10)

UPDATE table_name SET expr1

RETURNING column_name INTO :var_name;

這里的 :var_name 使用的是綁定變量

另外,RETURNING 貌似可以與 RETURN通用

INSERT INTO VALUES 支持 RETURNING

INSERT INTO SELECT、 和MERGE 語句 不支持 RETURNING

例子1:

建表語句:

CREATE TABLE TEST111(

A1 VARCHAR(10),

A2 VARCHAR(20)

);

CREATE SEQUENCE TEST111_S1

START WITH 1

INCREMENT BY 1

CACHE 20

MAXVALUE 999999999999999999999999999

CYCLE;

DECLARE

SEQ NUMBER;

BEGIN

INSERT INTO TEST111 VALUES(TEST111_S1.NEXTVAL,'AAA2')

RETURNING A1 INTO SEQ;

DBMS_OUTPUT.PUT_LINE(SEQ);

END;

DECLARE

SEQ NUMBER;

BEGIN

INSERT INTO TEST111 VALUES(TEST111_S1.NEXTVAL,'AAA3');

SELECT TEST111_S1.CURRVAL INTO SEQ FROM DUAL;

COMMIT;

DBMS_OUTPUT.PUT_LINE(SEQ);

END;

例子2:再另外,RETURNING 可以與BULK COLLECT 結合(批量綁定, 另外一個是 FORALL)

DECLARE

TYPE table_type IS TABLE OF column_name%TYPE;

v_tab table_type;

BEGIN

UPDATE table_name

SET expr1

RETURNING column_name BULK COLLECT INTO v_tab;

FOR i IN v_tab.first .. v_tab.last LOOP

DBMS_OUTPUT.put_line( l_tab(i));

END LOOP;

COMMIT;

END;

ORA-06547:INSERT,UPDATE或DELETE語句必須使用RETURNING子句

產生這個錯誤的原因:

returning into子句作用于insert,update,delete,上而select則不行,應該用into。

報錯的存儲如下:

create or replace procedure p_stu_info(s_id number, s_name varchar2) is

v_name varchar2(10);

v_age number;

v_ErrMsg varchar2(200);

begin

execute immediate 'select name,age from student_test where id=:1 and name=:2'

using s_id, s_name

returning into v_name, v_age;

dbms_output.put_line(v_name || '的年齡為:' || to_char(v_age));

exception

when others then

v_ErrMsg := SUBSTRB(SQLERRM, 1, 200);

dbms_output.put_line('找不到相應學生');

end p_stu_info;

改成下面這樣就ok了:

create or replace procedure p_stu_info(s_id number, s_name varchar2) is

v_name varchar2(10);

v_age number;

v_ErrMsg varchar2(200);

begin

execute immediate 'select name,age from student_test where id=:1 and name=:2'

into v_name, v_age

using s_id, s_name;

dbms_output.put_line(v_name || '的年齡為:' || to_char(v_age));

exception

when others then

v_ErrMsg := SUBSTRB(SQLERRM, 1, 200);

dbms_output.put_line('找不到相應學生,錯誤原因:'||v_ErrMsg);

end p_stu_info;

總結

以上是生活随笔為你收集整理的oracle语句怎么倒退,oracle RETURNING 子句使用方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。