2016-11-29 42 views
0

我正在尝试创建一个循环过程,以使用来自三个不同表的值填充x个不同值的表:FIRSTNAME,LASTNAME和LOCATION_DATA。不过,我不断收到错误:填充表的PL/SQL过程

Error(34,14): PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:  
(begin case declare end exit for goto if loop mod null  
pragma raise return select update while with <an identifier> 
<a double-quoted delimited-identifier> <a bind variable> << 
continue close current delete fetch lock insert open rollback 
savepoint set sql execute commit forall merge pipe purge.` 

这是我到目前为止有:

CREATE OR REPLACE PROCEDURE LOOP_TEST 
IS 
    FNLOOP int := 1; 
    LNLOOP int := 1; 
    LOCLOOP int := 1; 
BEGIN 
    WHILE FNLoop <= (SELECT MAX(ID) FROM FIRSTNAME) LOOP 
    BEGIN 
     WHILE LNLoop <= (SELECT MAX(ID) FROM LASTNAME) LOOP 
      BEGIN 
       WHILE LOCLOOP <= (SELECT MAX(ID) FROM LOCATION_DATA) LOOP 
        BEGIN 
         SELECT 
           FirstName 
           , (SELECT LastName 
           FROM LASTNAME B 
           WHERE LNLOOP = B.ID) 
          , (SELECT City 
           FROM LOCATION_DATA C 
           WHERE LOCLOOP = C.ID) 
          , (SELECT State 
           FROM LOCATION_DATA C 
           WHERE LOCLOOP = C.ID) 
         INTO RANDOM_DATA 
         FROM FIRSTNAME A 
         WHERE FNLOOP = A.ID; 
         LOCLOOP := LOCLOOP + 1; 
         --WAITFOR DELAY '00:00:01' 
        END; 
      LNLOOP := LNLOOP + 1; 
      LOCLOOP := 1; 
      END LOOP; 
     FNLOOP := FNLOOP + 1; 
     LNLOOP := 1; 
     END LOOP; 
    END LOOP; 
END LOOP_TEST; 

预先感谢您。

+0

这就是为什么我仔细格式化我的代码。不匹配的开始/结束,循环/结束循环等关键字跳出你。 –

+0

你将遇到的下一个问题是,你不能像条件测试那样放置隐式游标('WHILE FNLoop <=(SELECT MAX(ID)FROM FIRSTNAME)'等等。变量需要使用'select进入'。之后的问题是你还没有声明你选择的'RANDOM_DATA'记录 –

+0

我忘了提及我已经为RANDOM_DATA表添加了一个CREATE TABLE语句,这是不是一个足够的声明添加记录? –

回答

1

每个BEGIN语句都必须具有匹配的END语句。如果您在代码中计算BEGIN和END,您会发现后者中有四个是第一个,后两个是后者。

最简单的解决方案是移动内部BEGIN ... END块。你没有从他们那里获得任何价值。