oracle动态查询问题:如何将值转换为作为字符串一部分的变量

时间:2017-06-08 06:31:36

标签: oracle dynamic-sql

我需要有关以下方案的动态查询帮助。

我有一个过程A,其中我将一个字符串存储在一个输出变量中,该变量将传递给过程B.

过程B也接收tablename作为输入参数但过程A不接受,但过程A也使用tablename变量。

我正在考虑如何在过程A字符串中使用tablename变量,以便在将字符串传递给过程B时,将其tablename的输入变量值分配给过程A的字符串中的tablename变量。

我将尝试用一些代码示例来解释。这是一个示例,没有实际代码。

proc A
begin
--- string that uses tablename but has no variable input for tablename.

mystr:='AND DAY_OF_WEEK_ID IN (SELECT B.DAY_ID FROM DAY_OF_WEEK B 
                                             INNER JOIN CD.' || 'v_tableName' || ' CD
                                             ON TRIM(TO_CHAR(TO_TIMESTAMP(CD.GMT_SEIZ_DT_TIME,''YYYYMMDDHH24MISS''), ''DAY'')) = B.NAME WHERE B.DAY_ID IN (1,7))';

end;

proc B
(v_tablename, mystr)
begin
mystr2:= 'insert into sometable
select ' || mystr || ' from ' || v_tablename
end;

所以mystr字符串已经包含tablename变量,我希望将相同的值指定为过程B的变量v_table_name。

如果我让场景太复杂但我找不到更好的方法,我很抱歉。

问候。

1 个答案:

答案 0 :(得分:0)

在过程B中,您需要使用实际的表名替换传递的字符串中的占位符。

您发布的伪代码有点乱码,但是过程A生成的字符串中的占位符似乎是'v_tablename',过程B中的实际表名保存在名为v_tablename的变量中。既然如此,这对你有用:

mystr := replace(mystr, 'v_tablename', v_tablename);