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;
时间: 2024-08-30 01:30:06

ORA-06547: INSERT, UPDATE 或 DELETE 语句必须使用 RETURNING 子句的相关文章

MyBatis XML 映射器 select、insert update 和 delete、参数

MyBatis 的真正强大在于它的语句映射,这是它的魔力所在. 如果跟JDBC 代码进行对比,省掉了将近 95% 的代码. 1 selectCREATE TABLE person (id int(11) NOT NULL AUTO_INCREMENT,username varchar(100) DEFAULT NULL,password varchar(100) DEFAULT NULL,full_name varchar(100) DEFAULT NULL,first_name varchar

oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》

1 /* 2 * 多条记录连接成一条 3 * tableName 表名 4 * type 类型:可以是insert/update/select之一 5 */ 6 create or replace function my_concat(tableName varchar2,type varchar2) 7 return varchar2 8 is 9 type typ_cursor is ref cursor; 10 v_cursor typ_cursor; 11 v_temp varchar2

spring data jpa执行update和delete语句时报错处理

之前项目中使用spring data jpa时,遇到删除记录的需求时,主要利用spring data中自带的delete()方法处理,最近在dao层使用delete sql语句时报错,代码如下: [java] view plain copy @Query(value = "delete parcel,parcel_file,ms_files,t_order,route " + "from parcel left join route on parcel.route_id = 

SQL Server下ADO.NET 怎么获取数据库SQL语句INSERT,UPDATE,DELETE了多少行数据

ADO.NET 在发送SQL语句到SQL Server数据库后,怎么知道真正INSERT,UPDATE,DELETE了多少行数据呢? 使用SQL Server内置的全局变量@@ROWCOUNT即可,@@ROWCOUNT可以返回在当前数据库连接(SqlConnection)中,执行的上一条SQL语句影响了多少行数据,使用示例如下所示: INSERT INTO [dbo].[Person]([PersonCode],[Name],[Age],[City]) VALUES (N'P8000',N'He

利用insert,update和delete注入获取数据

0x00 简介 利用SQL注入获取数据库数据,利用的方法可以大致分为联合查询.报错.布尔盲注以及延时注入,通常这些方法都是基于select查询语句中的SQL注射点来实现的.那么,当我们发现了一个基于insert.update.delete语句的注射点时(比如有的网站会记录用户浏览记录,包括referer.client_ip.user-agent等,还有类似于用户注册.密码修改.信息删除等功能),还可以用如上方法获取我们需要的数据吗?在这里,我们以MYSQL的显错为例,看一下如何在insert.u

SQL update select结合语句详解及应用

来源:http://www.aimks.com/sql-update-the-select-statement-application.html QL update select语句 最常用的update语法是: UPDATE TABLE_NAME SET column_name1 = VALUE WHRER column_name2 = VALUE 如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦 第一,要select出来放在临时变量上,有很多个很难

【转载】SQL update select结合语句详解及应用

最常用的update语法是: 1 2 UPDATE TABLE_NAME SET column_name1 = VALUE WHRER column_name2 = VALUE 如果我的更新值Value是从一条select语句拿出来,而且有很多列的话,用这种语法就很麻烦 第一,要select出来放在临时变量上,有很多个很难保存. 第二,再将变量进行赋值. 列多起来非常麻烦,能不能像Insert那样,把整个Select语句的结果进行插入呢? 就好象下面:: 1 2 3 INSERT INTO ta

spring data jpa @Query注解中delete语句报错

项目中需要删除掉表中的一些数据 @Query("delete from EngineerServices es where es.engineerId = ?1") int deleteByEgId(String engineerId); 但是提示了错误 org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations 通过查阅相关的资料发现,对于执行update和delete语句需要添

SQL DELETE 语句:删除表中的记录语法及案例剖析

SQL DELETE 语句 DELETE 语句用于删除表中的记录. SQL DELETE 语句 DELETE 语句用于删除表中的行. SQL DELETE 语法 DELETE FROM table_name WHERE some_column=some_value; 请注意 SQL DELETE 语句中的 WHERE 子句! WHERE 子句规定哪条记录或者哪些记录需要删除.如果您省略了 WHERE 子句,所有的记录都将被删除! 演示数据库 在本教程中,我们将使用 样本数据库. 下面是选自 "W