2012-06-05 59 views
0

我正在使用Oracle SQL Developer臨時編輯器工具。有幾個小錯誤,我不知道如何解決。從SQL Server 2行轉換爲Oracle sp「未識別」

--SQLDEV:Following Line Not Recognized 
WHILE @I <= @PAT_CNT 

--SQLDEV:Following Line Not Recognized 
BEGIN 

SELECT PAT_NUMBER , 
     PATIENT_ID , 
     MRN , 
     LAST_NAME , 
     FIRST_NAME , 
     UNIT_CODE , 
     NURSING_UNIT , 
     SDT , 
     EDT , 
     SHIFT_CODE , 
     START_TIME , 
     END_TIME 

    INTO v_PAT_NUMBER, 
     v_PATIENT_ID, 
     v_MRN, 
     v_LAST_NAME, 
     v_FIRST_NAME, 
     v_UNIT_CODE, 
     v_NURSING_UNIT, 
     v_SDT, 
     v_EDT, 
     v_SHIFT_CODE, 
     v_START_TIME, 
     v_END_TIME 
    FROM tt_v_PATS 
WHERE PKEY = v_I; 


BEGIN 
    v_L_CUR_DATE := TRUNC_DATE(v_P_START_DATE) ; 
END; 

--SQLDEV:Following Line Not Recognized 
WHILE @L_CUR_DATE <= OPTC.TRUNC_DATE(@P_END_DATE) 

--SQLDEV:Following Line Not Recognized 
BEGIN 

回答

1

這不是明顯,我正是你所試圖做這裏...

在PL/SQL中,變量在匿名PL/SQL塊的DECLARE部分或IS/ AS宣佈什麼指定的PL/SQL塊(存儲過程或存儲函數)的一部分。在PL/SQL中,BEGIN需要與END配對 - 我在代碼中看到一堆BEGIN語句,沒有關聯END。而在PL/SQL中,您不使用@來引用變量。

這樣的事情在句法上是有效的,但它不是很明顯,它做你想做的事情。

DECLARE 
    v_PAT_NUMBER  tt_v_PATS.PAT_NUMBER%type; 
    v_PATIENT_ID  tt_v_PATS.PATIENT_ID%type; 
    v_MRN   tt_v_PATS.MRN%type; 
    v_LAST_NAME  tt_v_PATS.LAST_NAME%type; 
    v_FIRST_NAME  tt_v_PATS.FIRST_NAME%type; 
    v_UNIT_CODE  tt_v_PATS.UNIT_CODE%type; 
    v_NURSING_UNIT tt_v_PATS.NURSING_UNIT%type; 
    v_SDT   tt_v_PATS.SDT%type; 
    v_EDT   tt_v_PATS.EDT%type; 
    v_SHIFT_CODE  tt_v_PATS.SHIFT_CODE%type; 
    v_START_TIME  tt_v_PATS.START_TIME%type; 
    v_END_TIME  tt_v_PATS.END_TIME%type; 
    v_pat_cnt  integer := 100; 
BEGIN     
    FOR i IN 1 .. v_pat_cnt 
    LOOP 
    SELECT PAT_NUMBER , 
      PATIENT_ID , 
      MRN ,   
      LAST_NAME ,  
      FIRST_NAME , 
      UNIT_CODE ,  
      NURSING_UNIT , 
      SDT ,   
      EDT ,   
      SHIFT_CODE , 
      START_TIME , 
      END_TIME        
     INTO v_PAT_NUMBER, 
      v_PATIENT_ID, 
      v_MRN,   
      v_LAST_NAME, 
      v_FIRST_NAME, 
      v_UNIT_CODE, 
      v_NURSING_UNIT, 
      v_SDT,   
      v_EDT,   
      v_SHIFT_CODE, 
      v_START_TIME, 
      v_END_TIME  
     FROM tt_v_PATS  
    WHERE PKEY = i; 
    <<do something with the local variables>> 
    END LOOP; 
END; 

當然,你也可以使用記錄類型來簡化你的代碼位爲賈斯汀

DECLARE 
    v_PATS_REC  tt_v_PATS%rowype; 
    v_pat_cnt  integer := 100; 
BEGIN     
    FOR i IN 1 .. v_pat_cnt 
    LOOP 
    SELECT *        
     INTO v_PATS_REC 
     FROM tt_v_PATS  
    WHERE PKEY = i; 
    <<do something with the record>> 
    END LOOP; 
END; 
+0

OK感謝。我有一個適用於SQL Server和Oracle用戶的應用程序。大多數是SQL Server。我們必須編寫存儲過程才能在Oracle中工作。我先在SQL Server中編寫它們,因爲我不太瞭解Oracle。我使用這個工具Scratch Editor進行轉換。 –