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;
问题内容: 我正在尝试使用这段代码在laravel雄辩的查询生成器的withCount方法上执行where子句。 这段代码给了我这个错误。 SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘upvotes_count’ in ‘where clause’ (SQL: select , (select count() from upvot
本文向大家介绍使用gensim的word similar方法预测句子相关面试题,主要包含被问及使用gensim的word similar方法预测句子时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 利用gensim训练Word2vec向量,得到词向量空间,通过词向量空间预测词之间的相似度,从而去预测由词组成的句子之间的相似度。
如何使用hibernateTemplate执行批量更新操作。下面的代码抛出 原因:org。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:2 如何通过将用户列表作为参数传递来实现此批量更新操作???
问题内容: 今天,我发布了这样一个查询的答案 另一个用户已将答案发布到这样的查询中 如您所见,column_name和值的位置互换了。 从Mysql Docs expr IN(值,…) 如果expr等于IN列表中的任何值,则返回1;否则返回0。如果所有值都是常量,则根据expr的类型对它们进行求值并进行排序。然后使用二进制搜索完成对项目的搜索。这意味着如果IN值列表完全由常量组成,则IN非常快。
问题内容: 在WHERE子句中有使用SELECT语句描述的名称吗?这是好/不好的做法吗? 这会是更好的选择吗? 它远没有那么优雅,但是运行起来比以前的版本要快。我不喜欢它,因为它在GUI中没有非常清晰地显示(并且SQL初学者需要理解它)。我可以将其分为两个独立的查询,但是随后事情变得混乱了…… 注意:我不仅需要日期和分数(例如姓名) 问题答案: 称为相关子查询。它有它的用途。