When the entry in the dual dummy table has been deleted, you will get
the SP2-0575 error. To fix it, just insert the 'x' value into the dual table and don't forget to commit it.
1。一种可能是你的虚表出问题了。
SQL> select * from dual;
D
-
X
看看你的结果是不是这样?
2。如果你的结果是空的话,插入一个值
SQL> insert into dual values('x');
the SP2-0575 error. To fix it, just insert the 'x' value into the dual table and don't forget to commit it.
1。一种可能是你的虚表出问题了。
SQL> select * from dual;
D
-
X
看看你的结果是不是这样?
2。如果你的结果是空的话,插入一个值
SQL> insert into dual values('x');
3。下面是我做的测试:
1)删除虚表dual的值
SQL> select * from dual;
D
-
X
SQL> delete from dual;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from dual;
no rows selected
2)重新连接数据库,发觉出错
SQL> disconnect;
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.1.0 - Production
With the Partitioning option
JServer Release 8.1.7.1.0 - Production
SQL> conn system/manager
SP2-0575: Use of Oracle SQL feature not in SQL92 Entry Level.
Connected.
SQL> select * from dual;
no rows selected
3)在虚表中重新插入值
SQL> insert into dual values('x');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from dual;
D
-
x
4)问题解决
SQL> disconnect;
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.1.0 - Production
With the Partitioning option
JServer Release 8.1.7.1.0 - Production
SQL> conn system/manager
Connected.
SQL> select * from dual;
D
-
x
1)删除虚表dual的值
SQL> select * from dual;
D
-
X
SQL> delete from dual;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from dual;
no rows selected
2)重新连接数据库,发觉出错
SQL> disconnect;
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.1.0 - Production
With the Partitioning option
JServer Release 8.1.7.1.0 - Production
SQL> conn system/manager
SP2-0575: Use of Oracle SQL feature not in SQL92 Entry Level.
Connected.
SQL> select * from dual;
no rows selected
3)在虚表中重新插入值
SQL> insert into dual values('x');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from dual;
D
-
x
4)问题解决
SQL> disconnect;
Disconnected from Oracle8i Enterprise Edition Release 8.1.7.1.0 - Production
With the Partitioning option
JServer Release 8.1.7.1.0 - Production
SQL> conn system/manager
Connected.
SQL> select * from dual;
D
-
x
上面说了第一种情况是虚表中的行被删除了,这里说的第二种情况是用户自己建立了一个虚表,而表中是空的。
1。一般而言,运行下面的语句会有两条记录:
SQL> l
1 Select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED
2 from dba_objects
3* where object_name='DUAL'
SQL> /
OWNER OBJECT_NAM OBJECT_TYPE CREATED
------------------------------ ---------- ------------------ ----------
SYS DUAL TABLE 13-8月 -03
PUBLIC DUAL SYNONYM 13-8月 -03
2。每个用户用sqlplus连接数据库的时候,初始化连接会执行一些查询来返回用户的配置文件,其中一些查询需要用到虚表dual。如上面的情况下,每个用户使用的都是'SYS.DUAL'的同义词这个虚表。所以不会出错。
3。如果用户自己创建了一个虚表,而且里面没有数据话,则但以这个用户登录的时候会报错:
SQL> conn kathy/kathy
已连接。
SQL> create table DUAL( dummy varchar2(1));
表已创建。
SQL> select * from dual;
未选定行
SQL> conn system/manager
已连接。
(上面的用户system由于没有建立自己的虚表,所以连接的时候还是用的是SYS.DUAL的同义词,不会出错)
SQL> conn kathy/kathy
SP2-0575: Oracle SQL 特征不位于 SQL92 Entry层。
已连接。
(由于用户kathy建立了自己的虚表,所以连接的时候使用的是自己建立的虚表,而由于虚表是空的,所以连接的时候报错)
3。这时候发现数据库中有两个虚表:
SQL> Select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED
2 from dba_objects
3 where object_name='DUAL';
OWNER OBJECT_NAM OBJECT_TYPE CREATED
------------------------------ ---------- ------------------ ----------
SYS DUAL TABLE 13-8月 -03
PUBLIC DUAL SYNONYM 13-8月 -03
KATHY DUAL TABLE 06-9月 -03
4。这里我们可以把这个虚表改名或者删除来解决这个问题。
1)
SQL> conn kathy/kathy
SP2-0575: Oracle SQL 特征不位于 SQL92 Entry层。
已连接。
SQL> rename dual to dual1;
表已重命名。
SQL> disconnect;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy;
已连接。
2)这时候把虚表的名字再该回来,就不出错了。应该是这时候kathy用户的虚表链接已经指向SYS.DUAL,不会再指向重新命名的自己的虚表dual了。
SQL> conn kathy/kathy
已连接。
SQL> rename dual1 to dual;
表已重命名。
SQL> select * from dual;
未选定行
SQL> conn system/manager
已连接。
SQL> Select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED
2 from dba_objects
3 where object_name='DUAL';
OWNER OBJECT_NAM OBJECT_TYPE CREATED
------------------------------ ---------- ------------------ ----------
SYS DUAL TABLE 13-8月 -03
PUBLIC DUAL SYNONYM 13-8月 -03
KATHY DUAL TABLE 06-9月 -03
SQL> disconnect ;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy
已连接。
SQL> select * from dual;
未选定行
5。如果不是删除虚表dual,而是增加一行,同样可以解决这个问题。(不过不建议这么做,因为我不确定在数据库的其他地方是否会有影响)
SQL> conn kathy/kathy
已连接。
SQL> create table DUAL( dummy varchar2(1));
表已创建。
SQL> select * from dual;
未选定行
SQL> disconnect ;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy
SP2-0575: Oracle SQL 特征不位于 SQL92 Entry层。
已连接。
SQL> insert into dual values('x');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from dual;
D
-
x
SQL> disconnect ;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy
已连接。
1。一般而言,运行下面的语句会有两条记录:
SQL> l
1 Select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED
2 from dba_objects
3* where object_name='DUAL'
SQL> /
OWNER OBJECT_NAM OBJECT_TYPE CREATED
------------------------------ ---------- ------------------ ----------
SYS DUAL TABLE 13-8月 -03
PUBLIC DUAL SYNONYM 13-8月 -03
2。每个用户用sqlplus连接数据库的时候,初始化连接会执行一些查询来返回用户的配置文件,其中一些查询需要用到虚表dual。如上面的情况下,每个用户使用的都是'SYS.DUAL'的同义词这个虚表。所以不会出错。
3。如果用户自己创建了一个虚表,而且里面没有数据话,则但以这个用户登录的时候会报错:
SQL> conn kathy/kathy
已连接。
SQL> create table DUAL( dummy varchar2(1));
表已创建。
SQL> select * from dual;
未选定行
SQL> conn system/manager
已连接。
(上面的用户system由于没有建立自己的虚表,所以连接的时候还是用的是SYS.DUAL的同义词,不会出错)
SQL> conn kathy/kathy
SP2-0575: Oracle SQL 特征不位于 SQL92 Entry层。
已连接。
(由于用户kathy建立了自己的虚表,所以连接的时候使用的是自己建立的虚表,而由于虚表是空的,所以连接的时候报错)
3。这时候发现数据库中有两个虚表:
SQL> Select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED
2 from dba_objects
3 where object_name='DUAL';
OWNER OBJECT_NAM OBJECT_TYPE CREATED
------------------------------ ---------- ------------------ ----------
SYS DUAL TABLE 13-8月 -03
PUBLIC DUAL SYNONYM 13-8月 -03
KATHY DUAL TABLE 06-9月 -03
4。这里我们可以把这个虚表改名或者删除来解决这个问题。
1)
SQL> conn kathy/kathy
SP2-0575: Oracle SQL 特征不位于 SQL92 Entry层。
已连接。
SQL> rename dual to dual1;
表已重命名。
SQL> disconnect;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy;
已连接。
2)这时候把虚表的名字再该回来,就不出错了。应该是这时候kathy用户的虚表链接已经指向SYS.DUAL,不会再指向重新命名的自己的虚表dual了。
SQL> conn kathy/kathy
已连接。
SQL> rename dual1 to dual;
表已重命名。
SQL> select * from dual;
未选定行
SQL> conn system/manager
已连接。
SQL> Select OWNER,OBJECT_NAME,OBJECT_TYPE,CREATED
2 from dba_objects
3 where object_name='DUAL';
OWNER OBJECT_NAM OBJECT_TYPE CREATED
------------------------------ ---------- ------------------ ----------
SYS DUAL TABLE 13-8月 -03
PUBLIC DUAL SYNONYM 13-8月 -03
KATHY DUAL TABLE 06-9月 -03
SQL> disconnect ;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy
已连接。
SQL> select * from dual;
未选定行
5。如果不是删除虚表dual,而是增加一行,同样可以解决这个问题。(不过不建议这么做,因为我不确定在数据库的其他地方是否会有影响)
SQL> conn kathy/kathy
已连接。
SQL> create table DUAL( dummy varchar2(1));
表已创建。
SQL> select * from dual;
未选定行
SQL> disconnect ;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy
SP2-0575: Oracle SQL 特征不位于 SQL92 Entry层。
已连接。
SQL> insert into dual values('x');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from dual;
D
-
x
SQL> disconnect ;
从Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production
With the Partitioning option
JServer Release 8.1.7.0.0 - Production中断开
SQL> conn kathy/kathy
已连接。
已经查明原因,
在gg用户下,dual表不存在了!于是手工创建该表,并按照指示添加一条记录。问题即刻迎刃而解!
建议删除这个用户的虚表,都使用SYS.DUAL这个虚表的同义词。
因为oracle不建议一个数据库中有多个虚表。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23141985/viewspace-715861/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23141985/viewspace-715861/