2017-06-08 12 views
0

我需要帮助动态查询以下情形。oracle动态查询问题:如何将值作为字符串的一部分来获取值

我具有其中我存储输出变量的字符串将被传递给过程B.

程序B接收的表名也作为输入参数而操作A不程序A,但是过程A也使用tablename变量。

我想到的是如何使用的表名变量在程序的字符串,这样当字符串传递过程B,表名的它的输入变量值被分配到表名变量程序A的字符串中

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

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的字符串已经包含了,我想相同的值被指定为程序B.可变v_table_name表名变量

我道歉,如果我做了方案太复杂,但我不能找不到更好的方法。

问候。

+1

我不明白的问题 –

+0

对不起。我知道我的解释很复杂。发布实际的代码对我来说是不可行的。 –

回答

0

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

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

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

非常感谢。我对这个问题的不好解释表示歉意,但你仍然有这个观点。 –

+0

我已经这么长时间了:)但是更好的命名策略会产生更清晰的问题。 – APC

+0

下次我会记住这一点。 –

相关问题