我正在嘗試將類似下面的東西的一個oracle程序轉換爲Netezza,並在執行時遇到一些問題,沒有編譯錯誤。該過程在Oracle中成功執行。關於此任務,它是批處理過程,無需返回或採用輸入參數,並循環遍歷一個表來動態地準備SQL語句。由於Oracle不存在任何問題,因此邏輯建立良好。Netezza存儲過程錯誤
CREATE OR REPLACE PROCEDURE proc1()
RETURNS CHARACTER VARYING (ANY) EXECUTE AS OWNER LANGUAGE NZPLSQL AS
BEGIN_PROC
DECLARE
lv_sql varchar(4000);
lv1 varchar(4000);
lv2 varchar(4000);
lv3 varchar(4000);
lv4 varchar(4000);
lv5 varchar(4000);
lv_value varchar(1000);
lv_str_cnt integer;
lv_ret_string VARCHAR(1000);
BEGIN
FOR c1 IN (SELECT * from test)
LOOP
IF lv_str_cnt = 0 THEN
lv_ret_string := '''' || c1.col1 || '''';
ELSE IF lv_str_cnt IS NULL THEN
lv_ret_string := NULL;
ELSE
lv_ret_string := '''' || c1.col2 || '''';
END IF;
.............
.............
lv_sql := lv_sql || lv1 || lv2 || lv3 || lv4;
EXECUTE IMMEDIATE lv_sql;
END LOOP;
END;
END_PROC;
我收到以下錯誤,當程序執行 「語法錯誤,意想不到的WORD在VARCHAR2或接近」
VARCHAR2是Oracle數據類型,我可以確認被修改爲Netezza公司爲VARCHAR在我的程序在所有地方。我在谷歌搜索找到創建一個程序很好的例子,但不幸的是我無法得到理想的幫助。
此外還有特定的塊代碼,我想創建作爲功能並重新使用它。不幸的是,它也使用了函數語法。
感謝您的幫助
Netezza中沒有VARCHAR2。使用NVARCHAR。檢查lv_ret_string的類型。 – HGF
@HGF,是的同意,我已經在Lars指出後進行了修改。我也在編輯這個主題。但我仍然以相同的錯誤結束。 – Venkat
@HGF,有什麼需要光標的循環嗎? – Venkat