Postgresql - 在函数内插入语句不起作用

时间:2013-12-30 10:11:53

标签: postgresql postgresql-8.4

我在postgresql函数中做了一个Insert语句。要插入的值来自以下变量

VarCurInsert:=  
'INSERT INTO '||c_rec_jdd_table.DEL_TABLE_NAME||
             '('||VarSrcKeyFields||
               'JDD_UPDATE_DATE,MD_CHANGE_NUMBER,
                MD_SOURCE_SYSTEM,MD_INSERT_DATE,MD_CHANGE_FLAG) 
SELECT '||VarStgFields||','||'CURRENT_DATE,'||
       iods_change_number||','||isrc_system_key||
       ',CURRENT_DATE,''Y'' FROM TAB_STG'||
       CAST(ifunctionalgroup_key as text)||' 
WHERE I_TABLE_NAME ='''||c_rec_jdd_table.JDD_TABLE_NAME||''' 
  and SOURCE_SYSTEM ='||isrc_system_key;

插入内部使用的变量的输出

VarSrcKeyFields is (CATEGORY_ID,)

VarStgFields is (FIELD1)

这将是插入语句的输出

INSERT INTO TAB_STG(CATEGORY_ID,JDD_UPDATE_DATE,MD_CHANGE_NUMBER,
                    MD_SOURCE_SYSTEM,MD_INSERT_DATE,MD_CHANGE_FLAG) 
SELECT FIELD1,CURRENT_DATE,104712,1,CURRENT_DATE,'Y' 
FROM TAB_STG2 
WHERE I_TABLE_NAME ='CATEGORIES' and SOURCE_SYSTEM =1

收到以下错误

  

错误:列“category_id”的类型为bigint,但表达式的类型为字符变化   第1行:插入DEL_CATEGORIES_REF(CATEGORY_ID,JDD_UPDATE_DATE,M ......

我通过包含“cast function”修改了插入内容,但它抛出了不同的错误

  

错误:整数的输入语法无效:“FIELD1”

我在postgresql中手动尝试插入它工作正常。

INSERT INTO TAB_STG(CATEGORY_ID,JDD_UPDATE_DATE,MD_CHANGE_NUMBER,
                    MD_SOURCE_SYSTEM,MD_INSERT_DATE,MD_CHANGE_FLAG) 
SELECT FIELD1::bigint,CURRENT_DATE,104712,1,CURRENT_DATE,'Y' 
FROM TAB_STG2 
WHERE I_TABLE_NAME ='CATEGORIES' and SOURCE_SYSTEM =1

如何从insert中的变量传递输入值。需要你帮助修复错误^

专家评论后,我在下面添加了更多细节

我尝试在动态查询中传递强制转换函数但是它没有效果它抛出了错误:整数的输入语法无效:“FIELD1”

VarStgFields character varying(500); 
VarStgTempFields character varying(30) default ('FIELD');
VarStgFields := COALESCE(VarStgFields::TEXT,'')||varStgTempFields||CAST(intCount as TEXT); 

输出变量

VarSrcKeyFields is (CATEGORY_ID,)

VarStgFields is (FIELD1)

VarCurInsert:=  
    'INSERT INTO '||c_rec_jdd_table.DEL_TABLE_NAME||
                 '('||VarSrcKeyFields||
                   'JDD_UPDATE_DATE,MD_CHANGE_NUMBER,
                    MD_SOURCE_SYSTEM,MD_INSERT_DATE,MD_CHANGE_FLAG) 
    SELECT '||VarStgFields||','||'CURRENT_DATE,'||
           iods_change_number||','||isrc_system_key||
           ',CURRENT_DATE,''Y'' FROM TAB_STG'||
           CAST(ifunctionalgroup_key as text)||' 
    WHERE I_TABLE_NAME ='''||c_rec_jdd_table.JDD_TABLE_NAME||''' 
      and SOURCE_SYSTEM ='||isrc_system_key;

插入语句的输出

   INSERT INTO TAB_STG(CATEGORY_ID,JDD_UPDATE_DATE,MD_CHANGE_NUMBER,
                        MD_SOURCE_SYSTEM,MD_INSERT_DATE,MD_CHANGE_FLAG) 
    SELECT FIELD1,CURRENT_DATE,104712,1,CURRENT_DATE,'Y' 
    FROM TAB_STG2 
    WHERE I_TABLE_NAME ='CATEGORIES' and SOURCE_SYSTEM =1

表TAB_STG中的FIELD1列是字符变化的。但是,TAB_STG中的CATEGORY_ID列是bigint

如果我们在选择caluse中使用一个强制转换函数,比如SELECT'|| VarStgFields :: bigint ||它没有工作抛出ERROR:整数的输入语法无效:“FIELD1”

动态传递值时如何使用强制转换

0 个答案:

没有答案