Mike Christensen
Mike Christensen

Reputation: 91726

Syntax error in SQL*Plus

I'm trying to run the following query in SQL*Plus but I'm getting an error. However, the same exact query works fine with Aqua Data Studio.

SQL> CREATE OR REPLACE VIEW VIEW_WARREPORT
  2  AS
  3  WITH WGS (WORKGROUPID, Root) AS (
  4     SELECT WorkgroupID, CONNECT_BY_ROOT WORKGROUPID "Root"
  5        FROM TPM_WORKGROUPS
  6        START WITH PARENTWORKGROUPID=0
  7        CONNECT BY PRIOR WORKGROUPID = PARENTWORKGROUPID)
  8
SQL>     SELECT
  2            WG.NAME as Workgroup,
  3            WG.WORKGROUPID,
  4            TP.AREAID,
  5            WGS.Root as RootWorkgroup,
  6            DM.NAME as DeliveryMethod,
  7            D.TASKID,
  8            --D.ISMARKERCOMPLETION,
  9            T.NAME as TaskName,
 10            T.DESCRIPTION as TaskDescription,
 11            T.SHORTNAME,
 12            COALESCE(T.COURSECODE, 'N/A') as CourseCode,
 13            (U.FIRSTNAME || ' ' || U.LASTNAME) as HQOwner,
 14            ((T.DELIVERABLELENGTHHOUR * 60) + T.DELIVERABLELENGTHMINUTE) as TaskMinutes,
 15            TP.STARTDATE, TP.ENDDATE
 16          FROM TPM_TRAININGPLAN TP
 17          INNER JOIN TPM_WORKGROUPS WG ON TP.WORKGROUPID = WG.WORKGROUPID
 18          INNER JOIN TPM_DELIVERYMETHODS DM ON TP.METHODID = DM.METHODID
 19          INNER JOIN TPM_TRAININGPLANDELIVERABLES D ON TP.TRAININGPLANID = D.TRAININGPLANID
 20          INNER JOIN TPM_TASK T ON D.TASKID = T.TASKID
 21          INNER JOIN TPM_PROJECTVERSION V ON (T.PROJECTID = V.PROJECTID AND T.VERSIONID = V.VERSIONID AND V.STAGEID !
= 11 AND V.STAGEID != 12 AND V.STAGEID != 13 AND V.STAGEID != 15)
 22          INNER JOIN TPM_USER U ON V.BUSINESSSPONSOR = U.USERID
 23          INNER JOIN WGS ON WGS.WORKGROUPID = TP.WORKGROUPID
 24          WHERE TP.SCHEDULED=1 AND TP.TRAININGPLANTYPE='actual'
 25          ORDER BY STARTDATE;
        INNER JOIN WGS ON WGS.WORKGROUPID = TP.WORKGROUPID
                   *
ERROR at line 23:
ORA-00942: table or view does not exist

From what I can tell, the error is that WGS does not exist. But as you can see, I create this on line 3.

I'm running on not enough sleep and not enough caffeine, so the chances of me doing something stupid far outweigh the chances there's some weird SQL*Plus parsing bug, but I'm still curious as to why this works in Aqua. Oh also if I just run the query and not the view creation, I get the same error.

Thanks!

UPDATE:

Okay I think I see the problem. After the WITH clause, it starts a new query. So I guess my question is can this be prevented in SQL*Plus? I've tried doing a few things like putting a semicolon after WORKGROUPID = PARENTWORKGROUPID and that didn't help.

Upvotes: 0

Views: 817

Answers (2)

René Nyffenegger
René Nyffenegger

Reputation: 40603

You need to tell SQL*Plus that it should allow empty lines with a

SQL> set sqlblanklines on

and everything will work fine.

Upvotes: 2

Ollie
Ollie

Reputation: 17578

There is a line break causing SQL*Plus to start the new statement. Remove the line break after line 7 and it should be OK

Upvotes: 6

Related Questions