oracle动态查询问题:如何将值放入作为字符串一部分的变量中
oracle dynamic query issue: how to get value into a variable which is coming as a part of string
我需要以下场景的动态查询方面的帮助。
我有一个过程 A,我在其中将一个字符串存储在一个输出变量中,该变量将传递给过程 B。
过程 B 也接收表名作为输入参数,但过程 A 没有,但是过程 A 也使用表名变量。
我正在考虑如何在过程 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 字符串已经包含表名变量,我希望为其分配与过程 B 的变量 v_table_name 相同的值。
如果我使场景过于复杂,我深表歉意,但我找不到更好的方法。
此致。
在过程 B 中,您需要将传递的字符串中的占位符替换为实际的 table 名称。
您发布的伪代码有点乱码,但过程 A 生成的字符串中的占位符似乎是 'v_tablename'
,而过程 B 中的实际 table 名称保存在一个变量中称为 v_tablename
。既然如此,这对你有用:
mystr := replace(mystr, 'v_tablename', v_tablename);
我需要以下场景的动态查询方面的帮助。
我有一个过程 A,我在其中将一个字符串存储在一个输出变量中,该变量将传递给过程 B。
过程 B 也接收表名作为输入参数,但过程 A 没有,但是过程 A 也使用表名变量。
我正在考虑如何在过程 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 字符串已经包含表名变量,我希望为其分配与过程 B 的变量 v_table_name 相同的值。
如果我使场景过于复杂,我深表歉意,但我找不到更好的方法。
此致。
在过程 B 中,您需要将传递的字符串中的占位符替换为实际的 table 名称。
您发布的伪代码有点乱码,但过程 A 生成的字符串中的占位符似乎是 'v_tablename'
,而过程 B 中的实际 table 名称保存在一个变量中称为 v_tablename
。既然如此,这对你有用:
mystr := replace(mystr, 'v_tablename', v_tablename);