不正确退出会话后,怎么删除有问题会话(ora-01013)

来源:互联网 发布:java常见数据类型 编辑:程序博客网 时间:2024/06/05 04:49

这是一个故事~~

鄙人在玩pl/sql时候遇到了点小问题,我的操作在sqlplus上进行,如下

SQL> set serveroutput on;DECLARE  v_deptno emp.deptno%TYPE;  v_increment NUMBER(4);  v_empno emp.empno%type;BEGIN  v_empno:=&x;  SELECT deptno INTO v_deptno   FROM emp   WHERE empno=v_empno;  IF v_deptno=10 THEN v_increment:=100;  ELSIF v_deptno=20 THEN v_increment:=150;  ELSIF v_deptno=30 THEN v_increment:=200;  ELSE v_increment:=300;  END IF;  UPDATE emp SET sal=sal+v_increment WHERE empno=v_empno;END; 17  /Enter value for x: 10old   6:   v_empno:=&x;new   6:   v_empno:=10;DECLARE*ERROR at line 1:ORA-01403: no data foundORA-06512: at line 7

一开始看不懂为什么会错,以为是自己写的有错误,后来发现,原来是根本没有员工号为10的员工,判断条件那个是部门号(汗。。。)

接着我复制粘贴了一下代码,发现原来不用的,我想撤销,然后忘记按了crtl+z还是crtl+c了,结果如下

DECLARE  v_deptno emp.deptno%TYPE;  v_increment NUMBER(4);  v_empno emp.empno%type;BEGIN  v_empno:=&x;  SELECT deptno INTO v_deptno   FROM emp   WHERE empno=v_empno;  IF v_deptno=10 THEN v_increment:=100;  ELSIF v_deptno=20 THEN v_increment:=150;  ELSIF v_deptno=30 THEN v_increment:=200;  ELSE v_increment:=300;  END IF;  UPDATE emp SET sal=sal+v_increment WHERE empno=v_empno;END; 17  [1]+  Stopped                 rlwrap sqlplus / as sysdba

之后一直卡着

DECLARE  v_deptno emp.deptno%TYPE;  v_increment NUMBER(4);  v_empno emp.empno%type;BEGIN  v_empno:=&x;  SELECT deptno INTO v_deptno   FROM emp   WHERE empno=v_empno;  IF v_deptno=10 THEN v_increment:=100;  ELSIF v_deptno=20 THEN v_increment:=150;  ELSIF v_deptno=30 THEN v_increment:=200;  ELSE v_increment:=300;  END IF;  UPDATE emp SET sal=sal+v_increment WHERE empno=v_empno;END; 17  /Enter value for x: 7900old   6:   v_empno:=&x;new   6:   v_empno:=7900;DECLARE*ERROR at line 1:ORA-01013: user requested cancel of current operationORA-06512: at line 15

卡在上面的代码界面。然后crtl+c强制撤销,出现ora-01013那些错误。之后再登录进去,想再次测试pl/sql块就不行了,一样报ora-01013的错误

思考与解决方案

这个问题,我觉得是因为先前的scott会话卡在DBMS里了,没有正常撤销,所以只要我kill掉那个会话(其实质我还是不太清楚),应该就可以了。
之后用system用户登录,然后查看一下v$session,

SQL> connect system/123456Connected.SQL> select sid,serial#,username,type from v$session;       SID    SERIAL# USERNAME               TYPE---------- ---------- ------------------------------ ----------     1      1                    BACKGROUND     2      1                    BACKGROUND     3      1                    BACKGROUND     4      1                    BACKGROUND     5      1                    BACKGROUND     6      1                    BACKGROUND     7      1                    BACKGROUND     8      1                    BACKGROUND     9      5                    BACKGROUND    12      5                    BACKGROUND    13      3                    BACKGROUND       SID    SERIAL# USERNAME               TYPE---------- ---------- ------------------------------ ----------    17    105                    BACKGROUND       125      7 SCOTT              USER       126      1                    BACKGROUND       127      1                    BACKGROUND       128      1                    BACKGROUND       129      1                    BACKGROUND       130      1                    BACKGROUND       131      1                    BACKGROUND       132      1                    BACKGROUND       136     47 SYSTEM                 USER       138      7                    BACKGROUND       SID    SERIAL# USERNAME               TYPE---------- ---------- ------------------------------ ----------       139     31                    BACKGROUND23 rows selected.

显然,那个scott就是我们要删除的会话,删除之

SQL> alter system kill session '125,7';

之后再进行操作,就没事了

0 0
原创粉丝点击