2016-11-10 63 views
-1

我有INGRES DB 10.0Long varchar into varchar Ingres DB

我有LONG VARCHSR數據類型的變量。在其中用戶提交長字符串, 然後我有while循環,從該字符串中取+2000個字符,並將其放在列中有varchar(255)數據類型的表中。當我試圖編譯這個程序我得到錯誤E_US0971 Target list expression of type 'long varchar' cannot be coerced into local variable/parameter of type 'varchar'

這裏是我的while循環

:notelinenumber = 1; 
    :i = 1; 

WHILE :i < LENGTH(:note_text) 
    do 
    select SUBSTRING (:note_text, :i, 1900) into :note_part; 

    INSERT INTO NOTE 
      (note_number, 
      note_line_number, 
      note_date_stamp, 
      note_text) 
    VALUES (:note_number, 
       :notelinenumber, 
       Date('now'), 
       :note_part); 

     :i = :i+1900; 
     :notelinenumber = :notelinenumber+1;   
ENDWHILE; 

這裏是:note_text = LONG VARCHAR數據類型,但note_part = VARCHAR(255)。

我如何將我從while循環中從long varchar接收的部分轉換爲varchar(255)?

+0

@dazedandconfused爲varchar(255),最多可容納2000個字符。停止混淆我 – Andrey

回答

-2

的答案很簡單,你只只需要LONG VARCHAR轉換爲VARCHAR

:notelinenumber = 1; 
    :i = 1; 

WHILE :i < LENGTH(:note_text) 
    do 
    select varchar(SUBSTRING (:note_text, :i, 1900)) into :note_part; 

    INSERT INTO NOTE 
      (note_number, 
      note_line_number, 
      note_date_stamp, 
      note_text) 
    VALUES (:note_number, 
       :notelinenumber, 
       Date('now'), 
       :note_part); 

     :i = :i+1900; 
     :notelinenumber = :notelinenumber+1;   
ENDWHILE; 
+1

我不知道爲什麼你認爲varchar(255)可以容納2000個字符?也許檢查一下「SELECT cast('123456789'AS varchar(5))」的行爲,這應該給你一種我期望發生的事情的味道。即使在成功將long varchar轉換爲varchar之後,您仍然會遭受無意的修剪。您將需要增加note_text varchar的大小或減少要放入的字符串的長度:note_part。 – littlefeltfangs

+0

@littlefeltfangs我將longvarchar中的文本分成1900個字符。例如,如果long varchar持有2000個字符後,它會去槽這一點,而我將在表中有2個記錄,第一個將包含1900個字符,並有note_number 1和note_line_number 1,第二個記錄將有100個字符,將有not_number 1和note_line_number = 2。所以我的代碼完全適合我的需求 – Andrey