【发布时间】:2011-02-15 18:20:05
【问题描述】:
我正在使用存储过程通过游标将数据插入到临时表中。 此过程将动态查询存储在变量中以挂载插入/更新命令。
这里是代码(不是完整的查询,我剪掉了一些部分以便于阅读):
FOR VC2 IN (SELECT C.OBJETIVO,
C.AUDITORIA ,
C.NOME,
C.PRODUTO
FROM CALCULO C)
LOOP
SELECT ' V_UPD NUMBER := 0;
SELECT (SELECT ID_TIPO_TERR
FROM ZREPORTYTD_TMP
WHERE AUDITORIA = ''' || VC2.AUDITORIA || '''
AND TERRITORIO = ''' || VC2.NOME || '''
AND PRODUTO = ''' || VC2.PRODUTO || ''')
INTO V_UPD FROM DUAL;
UPDATE ZReportYTD_TMP
SET TARGET = ' || VC2.OBJETIVO || '
WHERE AUDITORIA = ''' || VC2.AUDITORIA || '''
AND TERRITORIO = ''' || VC2.NOME || '''
AND PRODUTO = ''' || VC2.PRODUTO || ''';'
INTO V_SQL FROM DUAL;
EXECUTE IMMEDIATE (V_SQL);
END LOOP
在动态查询中,这部分"SET TARGET = ' || VC2.OBJETIVO || '" 的值VC2.OBJETIVO 是Number 类型,它被替换为“62481,76”。换句话说,这个逗号使命令出错并且不起作用。
有没有一种简单的方法可以将“,”替换为“。”?
非常感谢! (:
【问题讨论】:
-
OBJETIVO 的数据类型是什么?
-
那么我不知道为什么它会返回数字作为格式化值。
-
你不知道为什么它会像现在这样返回或者为什么我想做我想做的事?
-
出了什么问题?是不是报错了?或者你没有得到想要的结果?
-
@Cybernate - 它以格式化值的形式返回数字,因为它必须转换为字符串才能附加到 SQL。真的不是要走的路。