2012-04-26 67 views
1

我回到了甲骨文的过于复杂的世界里,我想做到以下几点:选择最近插入的记录然后回滚

  • 插入一条记录到数据库中
  • 再次选择记录
  • 辊一切恢复

我已经创建了下面的代码失败

BEGIN 

insert into sometable values (1, 1, 'test', 'test', 1, 'a', 1, 1, 1, 'test', 'test', 'test', 'test', 1); 

select * 
from sometable 
where id = 1; 

ROLLBACK; 

END; 

错误消息:

ORA-06550: line 5, column 1: 
PLS-00428: an INTO clause is expected in this SELECT statement 

我相信这个问题是显而易见的,但我已经检查了文档并不能从中获得任何智慧。任何指针将不胜感激。

+0

声明类型'sometable%ROWTYPE'的变量,然后选择* INTO变量。 – Ollie 2012-04-26 13:37:08

+2

这是一种让人感到有必要问“为什么”的好奇情境。 – 2012-04-26 18:33:24

+0

@DavidAldridge - 哈哈我可以理解你为什么问。只是这样我才能做出改变,检查我对它感到满意,然后像在SQL Server中那样删除'ROLLBACK'。 – 2012-04-26 22:03:54

回答

3

从SQL * Plus而不只是BEGIN..END执行代码;

insert into sometable values (1, 1, 'test', 'test', 1, 'a', 1, 1, 1, 'test', 'test', 'test', 'test', 1); 

select * 
from sometable 
where id = 1; 

ROLLBACK; 
3

你必须把选择的值的变量 像

DECLARE 
    V_COUNT NUMBER; 
BEGIN 

insert into sometable values (1, 1, 'test', 'test', 1, 'a', 1, 1, 1, 'test', 'test', 'test', 'test', 1); 

select COUNT(1) INTO V_COUNT 
from sometable 
where id = 1; 

ROLLBACK; 

END; 
+0

这已停止了这些错误,但是如何获取V_COUNT的值以显示? – 2012-04-26 13:44:07

+0

SET SERVEROUTPUT ON在您的IDE中,然后在您的代码块中选择后添加'dbms_output.put_line(v_count);' – Ollie 2012-04-26 13:48:58