2014-04-20 52 views
0

我在一台64位笔记本电脑上安装了11g 32位Oracle Express。 任何pl/sql语句/语法被sql plus视为错误,只有sql代码被识别。SQL Plus未识别Oracle PL/SQL语句

必须是某处的Oracle配置问题。这是在遇到以前安装中的相同问题之后Oracle Express的全新安装。

其他人有这个问题吗?我已经把这个搜索引擎死亡了,而不是拿出一个解决方案。

Set serveroutput on 
Set echo off 
Remark *** Set up the SQL*Plus environment *** 

Set Pagesize 24 
Set Feedback Off 

Remark *** Format the Columns *** 
Column ctype Format A5  Heading Car|Type 
Column A  Format A3  Heading A 
Column B  Format A3  Heading B 
Column C  Format A3  Heading C 
Column D  Format A3  Heading D 
Column E  Format A3  Heading E 
Column F  Format A3  Heading F 
Column G  Format A3  Heading G 

break on ctype 

Remark *** The Query *** 
DECLARE 
    v_cid VARCHAR2(3); 
    v_grade CHAR(1); 
BEGIN 
    FOR ct IN (SELECT c_type# as ct FROM consultant) 
    LOOP 
     v_cid := ct; 
     SELECT  c_type# as ctype, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'A')) as A, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'B')) as B, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'C')) as C, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'D')) as D, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'E')) as E, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'F')) as F, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'G')) as G 
     FROM  consultant 
     WHERE  consultant.c_type# = v_cid 
     GROUP BY c_type# 
     ORDER BY ctype; 
    END LOOP; 
END; 
/

SELECT  car_type.c_type# as ctype, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'A')) as A, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'B')) as B, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'C')) as C, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'D')) as D, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'E')) as E, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'F')) as F, 
      TO_CHAR((SELECT count(grade) FROM consultant WHERE grade = 'G')) as G 
FROM  consultant 
INNER JOIN grade 
ON   consultant.grade = grade.grade 
INNER JOIN car_type 
ON   consultant.c_type# = car_type.c_type# 
GROUP BY car_type.c_type# 
ORDER BY ctype 
/
Remark *** Reset the environment *** 
Clear columns 
Ttitle Off 
Btitle Off 
Set Feedback on 
Set Pagesize 20 
Set Echo on 

Error code : ERROR at line 1: 
ORA-00922: missing or invalid option 
+2

发布声明和** exact **错误消息。 –

+0

编辑我原来的帖子,以反映代码。 –

+0

和DECLARE,BEGIN之类的任何pl sql代码都会抛出错误。没有SQL错误,但。 –

回答

1

替换

v_cid := ct; 

v_cid := ct.ct; 

的代码必须引用cursor_name.column_name,即使光标和列名是相同的。此外,它总能帮助将问题减少到最小的尺寸。

+0

感谢那一个,但错误没有区别。 SQL Plus似乎不喜欢PL SQL,并拒绝承认它的存在。既然搬到了新机器上,并且代码一切都很好。 –

+0

在SQL * Plus中,即使是这样一个微不足道的PL/SQL块也会失败:'exec null;' –